2
yajl 2.0.4 (yajl_tree.h 사용)를 사용하여 JSON 파일을 구문 분석하려고하지만 발견 된 값이 배열인지 아닌지를 감지하는 데 문제가 있습니다 (내가 YAJL_IS_ARRAY를 사용하는 경우에도, 형식 필드가 설정되어 있지 않은 것 같다 여기 C에서 YAJL 트리를 사용하여 JSON 파일의 배열 감지 문제
내 JSON 파일입니다.이 코드를 사용하는 경우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);
}
}
}
: 여기
{
"equipment": [
{
"name": "mynode",
"type": "node",
"attribute": [
{
"name": "cpu_available",
"value": "8"
},
{
"name": "memory_available",
"value": "24"
}
]
}
]
}
내 코드입니다 나는 YAJL_IS_AR을 입력하지 않는다. 값이 배열 인 경우에도 RAY를 반환합니다 (예 : attribute). 그래서 YAJL_IS_ARRAY가 배열을 얻으려면 올바르지 않다면 무엇을 사용해야합니까? 또한, 내 개체 (obj, obj2 ...)의 형식이 올바른 형식이 아닌 것은 정상입니까? 내가 실수 한거야?
미리 도움을 주셔서 감사합니다. :)
감사! :) 배열과 객체 사이에 혼란이있었습니다. – chipou