c - 当路径节点名称相同时,yajl_tree_get返回0

标签 c json yajl

这里是 JSON 文本:

{
    "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 文本的“nick”节点的函数

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如何一一解析“nick”呢?

如何获取 tomjim 等值

最佳答案

您需要首先获取info数组。然后遍历数组。

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);

}

完成

关于c - 当路径节点名称相同时,yajl_tree_get返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368520/

相关文章:

javascript - 更新对象数组中值的更好方法

ruby - 生成json的哈希结构是什么?

c - 是否可以制作一个指向结构(节点)的指针数组?

C代码将文件移动到垃圾箱

c - Autoconf 忽略编译器标志

java - 如何通过传递 json URL 使 URL 中的空格可读

javascript - 如何使用 JavaScript 搜索 JSON 树

c - 如何删除和更新 yajl C 库中的对象?

ruby - 如何在 Ruby 中将巨大的 JSON 文件作为流处理,而不消耗所有内存?

C - 获取目录路径