2016-04-25 83 views
0

我試圖解析JSON文件內的陣列,像這樣解析一個JSON陣列YAJL

{ 
    "val": [5,6] 
} 

使用下面的代碼,適於從包含在庫中的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.),但不用於該陣列。我需要做什麼不同的數組來解析?

謝謝。

+0

'{「VAL」 = 5}'是不是有效的JSON。 –

+0

@LeeDanielCrocker oops,只是在輸入問題時出錯。現在修復,謝謝指出。 – Sam

回答

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