cjson构建_cJSON用法总结
编译方式(cJSON库,一共两个文件:cJSON.c、cJSON.h)
gcc cJSON.c main.c -o main -lm
基本接口说明
创建的JSON格式说明:{}表示一个Object,[]表示一个Array
cJSON_CreateObject:创建一个JSON结构体 cJSON_AddItemToObject:把一个item添加到JSON结构体里 cJSON_Print:将JSON格式的字符串转成普通字符串 cJSON_Parse:将普通字符串转成JSON格式的字符串 cJSON_Delete:释放JSON结构体
下面这些宏定义可以更快捷地帮助你创建JSON节点#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))1
2
3
4
5
61
2
3
4
5
6
比如如果要添加一个“name”:“Tom”的节点,下面两行代码都是相等的cJSON_AddStringToObject(root, "name", "Tom")
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"))1
21
2
下面介绍JSON创建和解析的demo
创建JSON的方法
demo1{
"name": "Tom",
"age": 25,
"marry": true,
"child": null}1
2
3
4
5
61
2
3
4
5
6
创建demo1的代码实现char * cjson_create_test1(void)
{
char * out;
cJSON *root;
root = cJSON_CreateObject();
if(!root)
{
printf("cJSON create error!!\n");
return NULL;
}
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"));
cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(25));
cJSON_AddItemToObject(root, "marry", cJSON_CreateBool(1));
cJSON_AddItemToObject(root, "child", cJSON_CreateNull());
out=cJSON_Print(root);
cJSON_Delete(root);
if(out)
{
printf("%s\n", out);
return out;
}
return NULL;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
281
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
demo2{
"name": "Tom",
"age": 25,
"marry": true,
"children": [{
"name": "May",
"age": 2}, {
"name": "Kendy",
"age": 3}, {
"name": "Mark",
"age": 1}]}1
2
3
4
5
6
7
8
9
10
11
12
13
14
151
2
3
4
5
6
7
8
9
10
11
12
13
14
15
创建demo2的实现方法char * cjson_create_test2(void)
{
char * out;
cJSON *root;
cJSON *child, *child1, *child2, *child3;
root = cJSON_CreateObject();
if(!root)
{
printf("cJSON create error!!\n");
return NULL;
}
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom"));
cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(25));
cJSON_AddItemToObject(root, "marry", cJSON_CreateBool(1));
child = cJSON_CreateArray();
CJSON_CHK_FAIL(child, NULL);
cJSON_AddItemToObject(root, "children", child);
child1 = cJSON_CreateObject();
CJSON_CHK_FAIL(child1, NULL);
cJSON_AddItemToObject(child1, "name", cJSON_CreateString("May"));
cJSON_AddItemToObject(child1, "age", cJSON_CreateNumber(2));
child2 = cJSON_CreateObject();
CJSON_CHK_FAIL(child2, NULL);
cJSON_AddItemToObject(child2, "name", cJSON_CreateString("Kendy"));
cJSON_AddItemToObject(child2, "age", cJSON_CreateNumber(3));
child3 = cJSON_CreateObject();
CJSON_CHK_FAIL(child3, NULL);
cJSON_AddItemToObject(child3, "name", cJSON_CreateString("Mark"));
cJSON_AddItemToObject(child3, "age", cJSON_CreateNumber(1));
cJSON_AddItemToArray(child, child1);
cJSON_AddItemToArray(child, child2);
cJSON_AddItemToArray(child, child3);
out=cJSON_Print(root);
cJSON_Delete(root);
if(out)
{
printf("%s\n", out);
return out;
}
return NULL;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
511
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
解析JSON的方法
解析上面的demo1void cjson_parse_test1(void)
{
cJSON * root;
cJSON *name, *age, *marry, *child;
root = cJSON_Parse(cjson_create_test1());
if(!root)
{
printf("cJSON_Parse error!!\n");
return;
}
name = cJSON_GetObjectItem(root, "name");
if(name)
{
printf("Get name value : %s\n", name->valuestring);
}
age = cJSON_GetObjectItem(root, "age");
if(age)
{
printf("Get age value : %d\n", age->valueint);
}
marry = cJSON_GetObjectItem(root, "marry");
if(marry)
{
printf("Get marry value : %d\n", marry->valueint);
}
child = cJSON_GetObjectItem(root, "child");
if(child)
{
printf("Get child value : %s\n", marry->valuestring);
}
cJSON_Delete(root);
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
381
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
解析上面的demo2void cjson_parse_test2(void)
{
cJSON * root;
cJSON *name, *age, *marry, *children;
cJSON *childNode, *childName, *childAge;
root = cJSON_Parse(cjson_create_test2());
if(!root)
{
printf("cJSON_Parse error!!\n");
return;
}
name = cJSON_GetObjectItem(root, "name");
if(name)
{
printf("Get name value : %s\n", name->valuestring);
}
age = cJSON_GetObjectItem(root, "age");
if(age)
{
printf("Get age value : %d\n", age->valueint);
}
marry = cJSON_GetObjectItem(root, "marry");
if(marry)
{
printf("Get marry value : %d\n", marry->valueint);
}
children = cJSON_GetObjectItem(root, "children");
if(children)
{
int size = cJSON_GetArraySize(children);
printf("Get children size : %d\n", size);
int i = 0;
for(i=0; i
{
childNode = cJSON_GetArrayItem(children, i);
if(childNode)
{
childName = cJSON_GetObjectItem(childNode,"name");
if(childName)
{
printf("Get child name : %s\n", childName->valuestring);
}
childAge = cJSON_GetObjectItem(childNode,"age");
if(childAge)
{
printf("Get child age : %d\n", childAge->valueint);
}
}
}
}
cJSON_Delete(root);
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
cjson构建_cJSON用法总结相关推荐
- cjson构建_cJSON对象的构建
# cJSON对象的构建 ## 开始阅读源代码 **上面的文章中我们我们抓住了一条线,通过一个测试函数的实现来了解整个项目中的部分功能,当然,这不会覆盖所有的源代码,但我们会有一个清晰的思路来一步一步 ...
- windows c++ cjson 使用_cJSON源码剖析
1. 概述 cJSON源码非常简单,即使是最新版本的cJSON,其 cJSON.c文件也仅有 750 多行的代码, cJSON.h文件 200 行代码不到.其.h文件和.c文件总代码量不超过 ...
- cjson构建_[置顶] cJSON库(构建json与解析json字符串)-c语言
一.c语言获取json中的数据. 1.先要有cJOSN库,两个文件分别是cJSON.c和cJSON.h. 2.感性认识 char * json = "{ \"json\" ...
- [7.14更新日志]CRP编译缓存和海外构建让编译健步如飞!
编译缓存,海外构建,自由配置是否上传包等功能 编译依赖支持缓存,让快速反馈更加快速 支持的语言包括Java.Go.Node.js.Python,实测可以将分钟级编译时长降低到秒级,极大地缩短了工作流的 ...
- Docker 多阶段构建镜像multi-stage
多阶段构建是一个新特性,需要 Docker 17.05 或更高版本的守护进程和客户端.对于那些努力优化 Dockerfiles 并使其易于阅读和维护的人来说,多阶段构建非常有用. 在之前先来学习术语: ...
- Jenkins主从节点配置
jenkins支持主从模式,这将会把构建任务分发到多个从节点去执行,这样就可以支撑起多个项目的大量构建任务,同时,你可以提供多种环境(如:开发环境.生产环境)来对同一个项目进行测试和构建.想要进一步了 ...
- python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
SUMO入门(八) - 从Python引入TraCI接口 TraCI TraCI/Interfacing TraCI from Python TraCI命令分为13个部分,它们对应于各个模块: gui ...
- 撩开Docker的面纱
简述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会 ...
- webpack配置完全指南
概念 来看一下官网对webpack的定义: 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会 ...
最新文章
- 美多商城之验证码(短信验证码2)
- csharp通过dll调用opencv函数,图片作为参数
- 【备忘】とある画像の自动生成
- 2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)
- 【转】python装饰器
- 为mysql数据库建立索引
- linux 使用paho C库实现mqtt客户端
- SQL Server表竖列转横向显示
- 【ElasticSearch】Es 缓存
- Linux之find + sed组合替换命令
- 《算法图解》——数组和链表
- HCIE Security IPv6基础与安全技术 备考笔记(幕布)
- leetcode - Anagrams
- mysql用declare会报错_mysql创建存储过程declare 变量时报错
- paip.银联支付接口订单号uuid算法
- 微信小程序 背景图片设置
- 【python实现网络爬虫21】天眼查企业数据获取
- 面试——路径、转发与重定向的区别
- NOIP2015酱油记
- 国内有哪些比较靠谱的云主机供应商,性价比高一点的?