打印
[开发工具]

cJSON基本使用方法

[复制链接]
714|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dzfansman|  楼主 | 2022-8-25 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、构造json对象;2、向对象中添加元素;3、获取对象中元素;4、获取元素的值;5、json对象与数组互转;6、释放json对象空间;

从官网直接下载cJSON源文件,添加到工程中即可。

char jssd_def[256];

1、构造json对象;

cJSON* root = NULL;

cJSON* item = NULL;

item = cJSON_CreateObject();

root = cJSON_CreateObject();

2、向对象中添加元素;

        1、将对象作为元素进行添加:

cJSON_AddItemToObject(item, "name", cJSON_CreateString("xiaopeng"));

cJSON_AddItemToObject(item,"age",cJSON_CreateNumber(21));

cJSON_AddItemToObject(root,"root",item);

        2、直接添加元素:

        cJSON_AddItemToObject(root,"ID",cJSON_CreateNumber(1));

3、获取对象中元素;

root = cJSON_Parse(jssd_def);
item = cJSON_GetObjectItem(root, "root");

4、获取元素的值;

cJSON* age = NULL;

age = cJSON_GetObjectItem(item, "age");

printf( "age=%d\r\n", age->valueint );

5、json对象与数组互转;

        1、json对象转字符串

sprintf(jssd_def, "%s", cJSON_Print(root));//带格式化\n\t

sprintf(jssd_def, "%s", cJSON_PrintUnformatted(root));//不带格式

        2、字符串转json对象

root = cJSON_Parse(jssd_def);

6、释放json对象空间;

如果使用cJSON_Delete(cJSON *c);进行对象释放:当一个对象是另一个对象的元素时,只调用外层对象释放,否则会出现硬件错误;如果内层对象被释放,再释放外层对象,也会出现硬件错误。如果不放心,则可以直接使用free进行多次释放。

//cJSON_Delete( root );等价于{free( item );free( root );}
//警告:使用cJSON_Delete( root );则不能使用cJSON_Delete( item );
cJSON_Delete( root );


使用特权

评论回复
沙发
uiint| | 2022-9-3 16:50 | 只看该作者
使用parseJSON却返回null,这是为什么

使用特权

评论回复
板凳
pklong| | 2022-9-3 17:55 | 只看该作者
如何修改 cjson

使用特权

评论回复
地板
lihuami| | 2022-9-3 20:19 | 只看该作者
怎么实现JSON打包UDP

使用特权

评论回复
5
olivem55arlowe| | 2022-9-3 21:12 | 只看该作者
有哪些 C++ 的 JSON 库比较好

使用特权

评论回复
6
jackcat| | 2022-9-3 22:04 | 只看该作者
有没有谁在单片机上使用过cJSON库

使用特权

评论回复
7
Bowclad| | 2022-9-5 22:19 | 只看该作者
没在单片机上用过

使用特权

评论回复
8
onlycook| | 2022-9-6 15:34 | 只看该作者
每天学习点基础知识

使用特权

评论回复
9
AloneKaven| | 2022-11-4 21:38 | 只看该作者
怎么实现JSON打包UDP?

使用特权

评论回复
10
Undshing| | 2023-1-3 16:08 | 只看该作者
哪些JSON 库比较好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

2023

帖子

0

粉丝