标签:yajl
这里主要是举例说明一下如果通过yajl获取json中的值。
对于array和object来说,获取的方式略有不同,具体可以参考下面的代码。
我只是从网上搜集信息,知道有这么一种方法,如果还有别的方法,请各位高手指点一下
首先,先贴出需要解析的json语句
[
"source",
"abc",
{"key1":"value1"}
]
#include <stdio.h>
#include <string.h>
#include <yajl/yajl_tree.h>
static unsigned char fileData[65536];
int main(int argc, char **argv)
{
size_t rd = 0;
yajl_val node; //define yajl_val_s * yajl_val;
FILE *fp;
char errbuf[1024];
const char *json_file_path = "json_string";
int i;
int array_num = 0;
yajl_val obj;
fp = fopen(json_file_path, "r");
rd = fread((void *)fileData, sizeof(fileData), 1, fp);
const char *key[] = { "key1", (const char*) 0}; //用于在object对象中查找有没有key为"key1"的。
node = yajl_tree_parse((const char *)fileData, errbuf, sizeof(errbuf));
if(node == NULL) {
fprintf(stderr, "parse error:");
if(strlen(errbuf))
fprintf(stderr, "%s\n", errbuf);
else
fprintf(stderr, "unkonwn error\n");
return 1;
}
if(node && YAJL_IS_ARRAY(node)) {
array_num = node->u.array.len;
printf("Top level of json string is array, has %d elements\n", array_num);
for(i=0;i<array_num;i++) {
yajl_val obj = node->u.array.values[ i ];
if(!YAJL_IS_OBJECT(obj)) { //获取数组中的元素
if(YAJL_IS_STRING(obj)) {
printf("%d, value = %s\n", i, obj->u.string);
}
} else { //获取object中的元素
printf("%d elements is object\n", i);
yajl_val v = yajl_tree_get(obj, key, yajl_t_string);
if (v) {
printf("%s : %s\n", key[0], YAJL_GET_STRING(v));
} else {
printf("no such node: %s \n", key[0]);
}
}
}
}
return 0;
}
Top level of json string is array, has 3 elements 0, value = source 1, value = abc 2 elements is object key1 : value1
通过YAJL获取json中的值,布布扣,bubuko.com
标签:yajl
原文地址:http://blog.csdn.net/kyle__shaw/article/details/37542955