使用YAJL解析JSON数组

时间:2016-04-25 15:32:38

标签: c arrays json yajl

我正在尝试解析JSON文件中的数组,如此

parse_config.c

使用以下代码,改编自库中包含的char errbuf[1024]; yajl_val node; long length; char *file_data = read_file(&length, "conf.json"); node = yajl_tree_parse((const char *) file_data, errbuf, sizeof(errbuf)); const char *path[] = {"val", (const char *) 0}; yajl_val v = yajl_tree_get(node, path, yajl_t_number); if (v) printf("Node found.\n"); else printf("Can't find node %s\n", path[0]); yajl_tree_free(node); free(file_data);

{
    "val": 5
}

此方法对单个值成功,例如

v

(成功的意思是填充Node found.并打印#2088)但不是数组。对于要解析的数组,我需要做些什么?

感谢。

1 个答案:

答案 0 :(得分:0)

  • 您可以使用YAJL_IS_ARRAY来检查v是数组是true还是false。如果v是一个数组,它将返回true。如果v不是数组,则返回false。
  • 接下来,您可以使用此代码解析它:

    size_t len = v->u.array.len;
    int i;
    for ( i = 0; i < len; ++i ) {
    
        // get ref to one object in array at a time
        yajl_val obj = v->u.array.values[ i ]; // object
        if(YAJL_IS_DOUBLE(obj)){
                printf( "%s/%f ", key, obj->u.number.d );
        }
     }
    
  • 详情请见:Parse complex JSON sub objects in C with YAJL