YAJL을 통해 json 문 생성

3313 단어 json
여기서 주로 yajl을 통해 어떻게 json 문장을 생성하는지 소개한다.방법은 코드를 통해 아주 명확하게 볼 수 있는데, 단지 여기에 문자열만 넣었을 뿐이다.
가령 다른 유형을 추가해야 한다고 가정하면 yajl의 수첩을 조사하고 다른 함수를 호출하여 가입할 수 있다.
/*
 *             yajl  json  。
 *           ,             。
 */

#include <yajl/yajl_gen.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#define USE_MAP 1
#define BEAUTIFY_OUTPUT 1

typedef struct yajl_info_t
{
    int depth;
    yajl_gen gen; //    generator
} yajl_info;


/*
 * begin_map end_map       
 *            ,        /  
 */
yajl_gen_status begin_map(void *ctx)
{
    yajl_info *info = (yajl_info *)ctx;
    yajl_gen_status __stat = yajl_gen_map_open(info->gen);
    if (__stat == yajl_gen_status_ok)  {
        info->depth++ ;
    } else {
        printf("yajl_gen_map_open failed
"); } return __stat; } /* * begin_map end_map * , */ yajl_gen_status begin_array(void *ctx) { yajl_info *info = (yajl_info *)ctx; yajl_gen_status __stat = yajl_gen_array_open(info->gen); if (__stat == yajl_gen_status_ok) { info->depth++; } else { printf("yajl_gen_array_open failed
"); } return __stat; } yajl_gen_status end_array(void *ctx) { yajl_info *info = (yajl_info *)ctx; yajl_gen_status __stat = yajl_gen_array_close(info->gen); if (__stat == yajl_gen_status_ok) { info->depth--; } return __stat; } int yajl_init(yajl_info *info) { info->depth = 0; info->gen = yajl_gen_alloc(NULL); #ifdef BEAUTIFY_OUTPUT // yajl_gen_config(info->gen, yajl_gen_beautify, 1); #endif } int yajl_free(yajl_info *info) { info->depth = 0; yajl_gen_free(info->gen); } int main(int argc, char **argv) { yajl_info yajlinfo; yajl_init (&yajlinfo); const unsigned char* buf; size_t buflen; int i; #ifdef USE_MAP // begin_map(&yajlinfo); #else // begin_array(&yajlinfo); #endif // / unsigned char *key = "scutech"; unsigned char *value = "dingjia"; int keylen = strlen(key); int valuelen = strlen(value); yajl_gen_string(yajlinfo.gen, (const unsigned char*)key, keylen); yajl_gen_string(yajlinfo.gen, (const unsigned char*)value, valuelen); for(i=1;i<5;i++) { unsigned char key1[50]; unsigned char value1[50]; sprintf(key1, "scutech%d", i); sprintf(value1, "dingjia%d", i); int keylen1 = strlen(key1); int valuelen1 = strlen(value1); // begin_map(&yajlinfo); yajl_gen_string(yajlinfo.gen, (const unsigned char*)key1, keylen1); yajl_gen_string(yajlinfo.gen, (const unsigned char*)value1, valuelen1); end_map(&yajlinfo); } #ifdef USE_MAP end_map(&yajlinfo); #else end_array(&yajlinfo); #endif // json , buf , buflen yajl_gen_get_buf(yajlinfo.gen, &buf, &buflen); printf("%s
", buf); yajl_free(&yajlinfo); return 0;

좋은 웹페이지 즐겨찾기