2011-12-03 38 views
1

这里是JSON文本:yajl_tree_get返回0时路径节点名称相同

{ 
    "retcode": 0, 
    "result": { 
     "info": [{ 
      "face": 180, 
      "flag": 8913472, 
      "nick": "tom", 
      "uin": 2951718842 
     }, { 
      "face": 252, 
      "flag": 512, 
      "nick": "jim", 
      "uin": 824317252 
     }, { 
      "face": 0, 
      "flag": 17302018, 
      "nick": "hanmeimei", 
      "uin": 1179162105 
     }, { 
      "face": 522, 
      "flag": 4719104, 
      "nick": "lilei", 
      "uin": 108219029 
     }] 
    } 
} 
下面

是让JSON文本的“缺口”节点

char* getNickName() 
{ 
    char* path[20] = { "result", "info", "nick", (char *) 0 }; 
    yajl_val v; 
    yajl_val node; 
    node = yajl_tree_parse(buffer, errbuf, sizeof(errbuf)); 
    v = yajl_tree_get(node, path, yajl_t_string); 
    return YAJL_GET_STRING(v); 
} 

功能getNickName应的功能返回lilei或类似的东西,但实际上它总是返回0.

由于不仅有一个名为“nick”的节点,所以如何能yajl逐一解析“尼克”?

我怎么能得到的价值就像汤姆吉姆

回答

4

你需要得到信息阵列首先。然后遍历数组。

char* path[20] = { "result", "info", (char *) 0 }; 
yajl_val v; 
yajl_val info; 
info = yajl_tree_parse(buffer, errbuf, sizeof(errbuf)); 
if (info && YAJL_IS_ARRAY(info)) { 
    size_t len = info->u.array.len; 
    for(int i = 0;i < len; i++) { 
     const char *n_path[] = {"nick",(const char *)0}; 
     yajl_val n = yajl_tree_get(f,n_path,yajl_t_string); 

     // here is what you need 
     char *nickname = YAJL_GET_STRING(n); 

} 

DONE

相关问题