JSON-C库的使用(1)Json对象数组的解析

版本:json-c-0.9.tar.gz

参考:http://blog.csdn.net/mengyafei43/article/details/38494139

示例代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5 #include "json.h"
  6
  7 void encodeJson();
  8 void decodeJson();
  9
 10 int main(int argc, char **argv)
 11 {
 12     int ret = 0;
 13
 14     encodeJson();
 15
 16     decodeJson();
 17
 18     return ret;
 19 }
 20
 21 static char *json_type_to_name(int json_type)
 22 {
 23     char json_type_name[128];
 24
 25     memset(json_type_name, 0x00, sizeof(json_type_name));
 26     switch(json_type)
 27     {
 28         case json_type_null:
 29             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_null");
 30             break;
 31
 32         case json_type_boolean:
 33             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_boolean");
 34             break;
 35
 36         case json_type_double:
 37             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_double");
 38             break;
 39
 40         case json_type_int:
 41             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_int");
 42             break;
 43
 44         case json_type_object:
 45             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_object");
 46             break;
 47
 48         case json_type_array:
 49             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_array");
 50             break;
 51
 52         case json_type_string:
 53             snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_string");
 54             break;
 55     }
 56
 57     return json_type_name;
 58 }
 59
 60 static void getFieldValue(struct json_object *child_obj, const char *field)
 61 {
 62     struct json_object *obj = json_object_object_get(child_obj, field);
 63
 64     enum json_type obj_type = json_object_get_type(obj);
 65     //printf("%s json_type is %s\n", field, json_type_to_name(obj_type));
 66
 67     if (obj_type == json_type_int)
 68     {
 69         printf("%s=%d\n", field, json_object_get_int(obj));
 70     }
 71     else if (obj_type == json_type_string)
 72     {
 73         printf("%s=%s\n", field, json_object_get_string(obj));
 74     }
 75 }
 76
 77 void decodeJson()
 78 {
 79     const char *json_string = "{ \n\
 80         \"userinfo\": [ \n\
 81         { \"pin\": \"10000\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 82         { \"pin\": \"10001\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 83         { \"pin\": \"10002\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 84         { \"pin\": \"10003\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 85         { \"pin\": \"10004\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 86         { \"pin\": \"10005\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 87         { \"pin\": \"10006\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 88         { \"pin\": \"10007\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 89         { \"pin\": \"10008\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
 90         { \"pin\": \"10009\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 } \n\
 91         ] }";
 92
 93     int ret = 0;
 94     int i = 0;
 95     struct json_object *root_obj = NULL;
 96     struct json_object *arry_obj = NULL;
 97     struct json_object *child_obj = NULL;
 98     struct lh_entry *entry = NULL;
 99     char *key = NULL;
100
101     root_obj = json_tokener_parse(json_string);
102     entry = json_object_get_object(root_obj)->head;
103     if (entry)
104     {
105         key = (char *)entry->k;
106         arry_obj = (struct json_object *)entry->v;
107
108         if (json_type_array != json_object_get_type(arry_obj)
109             && json_type_object != json_object_get_type(arry_obj))
110         {
111             return -1;
112         }
113
114         printf("key = %s\n", key);
115         printf("array_obj = %s\n", json_object_to_json_string(arry_obj));
116
117         if (json_type_array == json_object_get_type(arry_obj))
118         {
119             for(i = 0; i < json_object_array_length(arry_obj); i++)
120             {
121                 child_obj = json_object_array_get_idx(arry_obj, i);
122                 //printf("child_obj = %s\n", json_object_to_json_string(child_obj));
123
124                 getFieldValue(child_obj, "pin");
125                 getFieldValue(child_obj, "cardno");
126                 getFieldValue(child_obj, "password");
127                 getFieldValue(child_obj, "name");
128                 getFieldValue(child_obj, "Privilege");
129                 getFieldValue(child_obj, "flag");
130                 printf("\n");
131             }
132         }
133         else if (json_type_object == json_object_get_type(arry_obj))
134         {
135
136         }
137     }
138
139 }
140
141 void encodeJson()
142 {
143     int i = 0;
144     struct json_object *root_obj = NULL;
145     struct json_object *child_obj = NULL;
146     struct json_object *array_obj = NULL;
147     char *tmpStr = NULL;
148
149     root_obj = json_object_new_object();
150     array_obj = json_object_new_array();
151
152     for(i = 0; i < 10; i++)
153     {
154         child_obj = json_object_new_object();
155
156         json_object_object_add(child_obj, "pin", json_object_new_string("10000"));
157         json_object_object_add(child_obj, "cardno", json_object_new_string("123456789"));
158         json_object_object_add(child_obj, "password", json_object_new_string("123456"));
159         json_object_object_add(child_obj, "name", json_object_new_string("paul"));
160         json_object_object_add(child_obj, "Privilege", json_object_new_int(14));
161         json_object_object_add(child_obj, "flag", json_object_new_int(1));
162
163         json_object_array_add(array_obj, child_obj);
164         child_obj = NULL;
165     }
166
167     json_object_object_add(root_obj, "userinfo", array_obj);
168
169     tmpStr = json_object_to_json_string(root_obj);
170     printf("%s\n", tmpStr);
171 }

运行结果:

时间: 2024-10-01 07:51:45

JSON-C库的使用(1)Json对象数组的解析的相关文章

ES6 set和map数据结构对对象数组去重简单实现

自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [...new Set(arr)] } console.log(unique(arr)) // [1, 2, 3, 4] 但是当数组的项不再是简单的数据类型时,比如是对象时,这种方法就会导致错误,比如下面的结果 let arr = [ { name: 'a', num: 1}, { name: 'b',

转: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 Volley 库通过网络获取 JSON 数据

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

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

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

json数组对象和对象数组

一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”. 第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或di

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 使用起来如下:

2017/5/8总结 js数组及json(对象数组)操作

1.request获取传值问题 for (int i = 0; i < context.Request.Form.Count; i++) { //for (int i = 0; i < context.Request.Form.Keys[i] ; ) string []txtArr=context.Request.Params.GetValues(context.Request.Form.Keys[i]); for (int j = 0; j<txtArr.Length;j++ ) sb