如何解析嵌套的json对象

时间:2014-05-14 06:44:59

标签: c json parsing

我使用C编写的json解析器lib来解析JSON对象。 lib链接是:https://github.com/udp/json-parser

我想解析的json对象/字符串是:

{" video_id":105," st":" S3","处理" :[{" start" :" 1","结束" :" 2"}]}}

"处理"包含另一个JSON对象。

我已经解析了前三项。但我无法找到解析"处理" json对象的方法。我使用以下代码: -

   if (!strcmp(json->u.object.values[i].name, "video_id")) 
    {
      video_id=json->u.object.values[i].value->u.integer;
    }
    .
    .
    if (!strcmp(json->u.object.values[i].name, "processing")) 
    {
         printf("\nNumber of JSON OBJECTS : %d\n", json->u.object.values[i].value->u.object.length); 
    }

json是通过在JSON字符串上调用lib获得的解析对象。任何人都可以指导我如何处理嵌套对象?

任何帮助都将非常感激

我的完整代码是:

json_value *json;                                                   
json_char *json_object="{\"video_id\": 105, \"st\": \"S3\", \"processing\" : [{\"type\" : \"clipping\"},{\"fese\" : \"dipping\"}]}";



    printf("%s",json_object);
    //json_value * json_parse (const json_char * json,
      //                   size_t length);
    json=json_parse(json_object, strlen(json_object));

//  json_type json_object;


    printf("\n%s\n",json->u.object.values[0].name);
    printf("\t%d\n",json->u.object.values[0].value->u.integer);

    printf("\n%s\n",json->u.object.values[2].name);
    printf("\t%d\n",json->u.object.values[2].value->u.object.length);

printf("\t%s\n",json->u.object.values[2].value->u.object.values[0].name);

2 个答案:

答案 0 :(得分:1)

来自documentation,API字段::

type的{​​{1}}字段是以下之一:

  • json_object(参见u.object.length,u.object.values [x] .name,u.object.values [x] .value)
  • json_array (参见u.array.length,u.array.values)
  • json_integer(见u.integer)
  • json_double(参见u.dbl)
  • json_string(参见u.string.ptr,u.string.length)
  • json_boolean(参见u.boolean)
  • json_null

因此,请检查"处理"的json_value字段。值。如果发现是type,请为数组执行json_array以获取新的json_parse。现在这个json_value将为您提供嵌套的JSON对象。

答案 1 :(得分:0)

将这些作为参考:

js_v->u.object.values[1].value->u.array.values[0]->type
js_v->u.object.values[1].value->u.array.values[0]->u.string.ptr

我用它们来引用数组中的字符串元素:
{"t":"type","d":["element1","element2","element3"]}

在你的情况下,我认为你应该重复这样的结构:
js_v->u.object.values[2].value->u.array.values[0]->u.object.values[0]->u.string.ptr

运气!