c - 使用 C 中的 YAJL 树检测 JSON 文件中的数组时出现问题

标签 c arrays json yajl

我尝试使用 yajl 2.0.4(使用 yajl_tree.h)解析 JSON 文件,但在检测找到的值是否是数组时遇到一些问题(即使我使用 YAJL_IS_ARRAY,似乎类型字段未设置。

这是我的 JSON 文件:

{
    "equipment": [
        {
            "name": "mynode",
            "type": "node",
            "attribute": [
                {
                    "name": "cpu_available",
                    "value": "8"
                },
                {
                    "name": "memory_available",
                    "value": "24"
                }
            ]
        }
    ]
}

这是我的代码:

const char *path[] = { "equipment", (const char *) 0 };
yajl_val v = yajl_tree_get( node, path, yajl_t_array );
if ( v && YAJL_IS_ARRAY( v ) ) {
    for ( i = 0; i < v->u.array.len; i++ ) {
        yajl_val obj = v->u.array.values[i];
        if( obj && YAJL_IS_ARRAY(obj)) {
            for ( j = 0; j < obj->u.object.len; j++ ) {
                yajl_val obj2 = obj->u.array.values[ j ];
                if(obj2 && YAJL_IS_ARRAY(obj2)) {
                    for ( k = 0; k < obj2->u.array.len; k++ ) {
                        yajl_val obj3 = obj->u.array.values[ k ];
                        const char * key3 = obj3->u.object.keys[ k ];
                        yajl_val val3 = obj3->u.object.values[ k ];
                            printf( "      %s : %s \n", key3, val3->u.string );
                    }
                }
                else {
                    const char * key2 = obj->u.object.keys[ j ];
                    yajl_val val2 = obj->u.object.values[ j ];
                        printf( "    %s : %s \n", key2, val2->u.string );
                }
            }
        }
        else {
            const char * key = obj->u.object.keys[ i ];
            yajl_val val = obj->u.object.values[ i ];
                printf( "  %s : %s ", key, val->u.string );
        }
    }
}

当我使用此代码时,即使该值是一个数组(例如属性),我也不会输入 YAJL_IS_ARRAY。所以我想知道如果 YAJL_IS_ARRAY 获取数组不正确,必须使用什么?此外,我的对象(obj、obj2...)的类型没有正确的类型是否正常?我犯了什么错误?

预先感谢您的帮助。 :)

最佳答案

您的 JSON 不是数组。它是一个字典,键为“equipment”,“equipment”的值为一个数组。在本例中,是一个包含单个字典的数组。

关于c - 使用 C 中的 YAJL 树检测 JSON 文件中的数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610421/

相关文章:

c - 出于清晰或优化的原因编写冗余程序流程语句?

c - 修复 C 中的堆属性数据结构

c - 如何创建并行堆栈并在其上运行协程?

c++ - 如何在运行时设置数组大小而不构造对象?

json - 如何测试期望通过 POST 请求接收 JSON 数组的 Controller 操作?

ruby-on-rails - Ruby 获取深度嵌套的 JSON API 数据

c - 如果我已经会了 Assembly,我还应该学习 C 吗?

c++ - 如何将 3D 数组作为参数传递给函数 C++?还需要将全局变量传递给函数吗?

javascript - 将 JavaScript for 循环集成到自定义函数中

javascript - 使用 jquery 遍历 json 对象数组