(json-c学习6) linux c语言解析json对象和子对象的组合(纯代码)

 头文件什么的都在首篇(json-c学习1) linux c语言解析json数组(纯代码),这里只写一个简单的函数:

334 void ParsingBodyJsonFuncton(void)
335 {
336     //封装成如下形式的json内容:
337     /*
338         {
339             "loop_number": 1,
340             "sensor_address:1,
341             "body":
342             {
343                 "loop_number":2,"sensor_address":3","module_id":4
344             }
345         }
346     */
347     int ln = 0;
348     int sd = 0;
349     int lnn = 0;
350     int sdd = 0;
351     int mi = 0;
352     char *str = "{\"loop_number\":1, \"sensor_address\":1, \"body\":{\"loop_number\":2, \"sensor_address\":3, \"module_id\"    :4}}";
353     json_object *pstObj = NULL;
354     json_object *sonPstObj = NULL;
355     pstObj = json_tokener_parse(str);
356     if (NULL == pstObj)
357     {
358         printf("%s : json_tokener_parse failed.\n", __FUNCTION__);
359     }
360     else
361     {
362         json_object_object_foreach(pstObj, key1, val1)
363         {
364             if (0 == strcmp(key1, LOOP_NUMBER))
365             {
366                 ln = json_object_get_int(val1);
367                 printf("ln = %d\n", ln);
368             }
369             else if (0 == strcmp(key1, SENSOR_ADDRESS))
370             {
371                 sd = json_object_get_int(val1);
372                 printf("sd = %d\n", sd);
373             }
374             else if (0 == strcmp(key1, BODY))
375             {
376                 sonPstObj = json_tokener_parse(json_object_get_string(val1));
377                 if (NULL == sonPstObj)
378                 {
379                     printf("parsing failed!\n");
380                 }
381                 else
382                 {
383                     json_object_object_foreach(sonPstObj, key2, val2)
384                     {
385                         if (0 == strcmp(key2, LOOP_NUMBER))
386                         {
387                             lnn = json_object_get_int(val2);
388                             printf("lnn = %d\n", lnn);
389                         }
390                         else if (0 == strcmp(key2, SENSOR_ADDRESS))
391                         {
392                             sdd = json_object_get_int(val2);
393                             printf("sdd = %d\n", sdd);
394                         }
395                         else if (0 == strcmp(key2, MODULE_ID))
396                         {
397                             mi = json_object_get_int(val2);
398                             printf("mi = %d\n", mi);
399                         }
400                     }
401                 }
402             }
403         }
404     }
405 }

main函数:

407 int main(void)
408 {
409     char *body = TestBodyFunction();
410     ParsingBodyFunction(body);
411     printf("=====================================================\n");
412     //struct json_object *array = TestArrayFunction();
413     char *array = TestArrayFunction();
414     ParsingArrayFunction(array);
415     printf("=====================================================\n");
416     char *str = "[{\"loop_number\":1, \"sensor_address\":2}]";
417     int len = strlen(str);
418     printf("len = %d\n", len);
419     PkgArrayFunction();
420     printf("=====================================================\n");
421     PkgJsonFunction();
422     printf("=====================================================\n");
423     PkgBodyArrayFunction();
424     printf("=====================================================\n");
425     PkgBodyJsonFuncton();
426     printf("=====================================================\n");
427     ParsingBodyJsonFuncton();
428     return 0;
429 }

 

已标记关键词 清除标记
相关推荐