JSON-C库的使用(2)Json对象的遍历

示例代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5 #include "json.h"
  6
  7 void parseJsonString(struct json_object *obj);
  8
  9 int main(int argc, char **argv)
 10 {
 11     const char *json_string = "{\n\
 12         \"errNum\": 0,\n\
 13         \"errMsg\": \"success\",\n\
 14         \"shanghai\": {\n\
 15             \"name\": \"szzs\",\n\
 16             \"curdot\": 2323.554,\n\
 17             \"curprice\": -5.897,\n\
 18             \"rate\": 0.25,\n\
 19             \"dealnumber\": 11586,\n\
 20             \"turnover\": 98322,\n\
 21         },\n 22         \"shengzhen\": {\n\
 23             \"name\": \"scz\",\n\
 24             \"curdot\": 2323.554,\n\
 25             \"curprice\": -5.897,\n\
 26             \"rate\": 0.25,\n\
 27             \"dealnumber\": 11586,\n\
 28             \"turnover\": 98322,\n\
 29         },\n 30     }";
 31     int ret = 0;
 32     struct json_object *obj = NULL;
 33
 34     printf("%s\n", json_string);
 35     obj = json_tokener_parse(json_string);
 36
 37     parseJsonString(obj);
 38
 39     if (is_error(obj))
 40     {
 41         printf("json_tokener_parse error: %s\n", json_tokener_errors[-(unsigned long )obj]);
 42         return -1;
 43     }
 44
 45     if (obj)
 46     {
 47         json_object_put(obj);
 48         obj = NULL;
 49     }
 50
 51     return 0;
 52 }
 53
 54
 55 void parseJsonString(struct json_object *obj)
 56 {
 57     char *key = NULL;
 58     struct lh_entry *entry = NULL;
 59     struct json_object* val = NULL;
 60
 61     entry = json_object_get_object(obj)->head;
 62
 63     while (entry)
 64     {
 65         key = (char *)entry->k;
 66         val = (struct json_object *)entry->v;
 67
 68         printf("key: %s\n", key);
 69         switch (json_object_get_type(val))
 70         {
 71             case json_type_null:
 72                 printf("json type: json_type_null\n");
 73                 printf("val: %s\n\n", json_object_get_string(val));
 74                 break;
 75
 76             case json_type_boolean:
 77                 printf("json type: json_type_boolean\n");
 78                 printf("val: %d\n\n", json_object_get_boolean(val));
 79                 break;
 80
 81             case json_type_double:
 82                 printf("json type: json_type_double\n");
 83                 printf("val: %f\n\n", json_object_get_double(val));
 84                 break;
 85
 86             case json_type_int:
 87                 printf("json type: json_type_int\n");
 88                 printf("val: %d\n\n", json_object_get_int(val));
 89                 break;
 90
 91             case json_type_object:
 92                 printf("json type: json_type_object\n");
 93                 printf("val: %s\n\n", json_object_get_string(val));
 94                 parseJsonString(val);
 95                 break;
 96
 97             case json_type_array:
 98                 printf("json type: json_type_array\n");
 99                 printf("val: %s\n\n", json_object_get_string(val));
100                 break;
101
102             case json_type_string:
103                 printf("json type: json_type_string\n");
104                 printf("val: %s\n\n", json_object_get_string(val));
105                 break;
106
107         }
108
109         entry = entry->next;
110         if (NULL == entry)
111         {
112             printf("there is an end\n");
113         }
114     }
115 }
时间: 2024-09-15 08:08:45

JSON-C库的使用(2)Json对象的遍历的相关文章

转:Delphi语言最好的JSON代码库 mORMot学习笔记1

mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里 --------------------------------------------------------- 在进行网络编程中需要JSON对象的构建与解析,这个Delphi XE+自带:{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}不过,不好用,大家更喜欢SuperObject.我本人以前一直用JsonDa

Delphi语言最好的JSON代码库 mORMot学习笔记1

在进行网络编程中需要JSON对象的构建与解析,这个Delphi XE+自带:{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}不过,不好用,大家更喜欢SuperObject.我本人以前一直用JsonDataObjects.今天要给大家介绍的这套JSON代码库算是“世外高人”,身怀绝世武功,而默默无闻,这就是 mORMot 系列开发框架.这是一个功能超级强大,学习曲线壁陡的开源框架. http://synopse.info/

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包.前者是 Apache 开源库,后者是 Android 自带 API.企业级应用,一般都会选择使用已经封装好的 http 框架.比较流行有 Volley.android-async-http.retrofit.okhttp.androidquery.

json解析库的使用

前言: 使用官方json.cpp解析库解析json文件 #include <json\json.h> #pragma comment(lib, "lib_json.lib") /************************/ /*json写操作*/ /************************/ void json_write_test() { Json::Value json_temp; json_temp["name"] = Json::V

.Net Core下一次针对dpz2.Json和Newtonsoft.Json解析库的简单测试

关于dpz2.Json dpz2.Json是大胖子软件的自研Json解析库. 应用于更加简单的使用场景 在dpz2.Json诞生之前,我们一直使用的是Newtonsoft.Json解析库,Newtonsoft.Json最方便的地方是采用了类似JavaBean的绑定方式进行操作,但是实际操作时,我们可能更多时候只想要个解析器,好让我们能快速的辨别数据,这个时候,单纯的JavaBean方式又变得比较肘制,读取数据使用C#的动态类型确实可以比较方便的进行操作. 专注于直接操作 另外一个促使我们自研一个

Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】

Json 简介 Json (JavaScript Object Notation) 是一种轻量级的数据交换格式.它作为目前最欢迎的数据交换格式,也是各大开源贡献者的必争之地,如:阿里爸爸的 fastjson(java),腾讯的 rapidjson(c++) 等.但 .Net 却没有得到大厂的青睐,在 Swifter.Json 之前 .Net 的 Json 解析库都不完美. Swifter.Json 简介 Swifter.Json 是 .Net 平台上一个功能强大,简单易用,稳定及高性能的 Jso

几种java JSON解析库的评测单元测试及源码

迷信了很长时间的阿里,但今天突然做了一些json库的测试,结果大跌眼镜,评测 结果是,org.json库与org.simple.json库相差不多,在一个数量级,但是阿里fastjson. net.sf.json库和Gson速度最慢.或许已经有人想喷了,但我就是呈现一个测试结果, 欢迎来指导我理解的不足,或许阿里还有很多特殊的泛型的处理和类型转换我没有用 到,本帖的所要阐明的是处理字符串解析并取得对象的一些属性没有涉及泛型时的速 度评测. 评测结果如图: 源码如下: import junit.f

VC 使用json静态库 问题解决

release使用 json 静态库 提示 fatal error C1083: 无法打开编译器生成的文件:“../../build/vs71/release/lib_json\json_writer.asm”: No such file or directory VC 使用json静态库 问题解决,布布扣,bubuko.com

c++ 使用json的库。cJSON

你看到的这个文章来自于http://www.cnblogs.com/ayanmw cJSON官网是:http://sourceforge.net/projects/cjson/?source=recommended 最新版本是2013年的,与2009年的变化不是很大. 看了代码,觉得挺好,只是是C语言的,不够好. 就改良了一下,内存自己管理.使用std::string http://files.cnblogs.com/ayanmw/cJSON_cpp_myversion.zip 使用起来如下: