gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:53:04 25 4
gpt4 key购买 nike

我尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com