Cjson库介绍

常用库介绍  cJSON

JSON 是一种轻量、可读性高、跨平台的数据交换格式,常见于设备与云端、上位机、网页和小程序之间的数据通信。

简单来说,JSON 格式大概长这样  {“voltage"":3.3,"current":1.2} ,最外层一般是一对大括号,里面是一组一组的 key 和 value,中间用冒号连接,不同字段之间用逗号分隔,比如温度、湿度、设备编号、开关状态这类信息都可以用 JSON 来统一描述。如果你的嵌入式项目需要做一些数据交互,那么你很有可能会需要一个C语言的 JSON库。

今天介绍一个在嵌入式领域非常常用的JSON库 :cJSON。cJSON的作者在2009年创建了这个项目,从设计之初到现在,他一直坚持极简路线。为了支持尽可能多的平台和编译器,cJSON采用了C89标准,可以说是C语言里的最大公约数。在移植方面,cJSON没有复杂的构建和配置,只要加入一个C文件和一个H文件,就能在工程里用起来。但有一点要注意,cJSON依赖动态内存。也就是会用到malloc和free,默认情况下它调用的是stdlib的内存接口。如果你的工程有统一的内存管理策略,比如统一走 freertos 的 heap 接口,也可以替换。常见替换方法有两种

1、直接修改cJSON源码里的内存宏。2、通过cJSON_InitHooks注册你自己的内存函数。

cJSON 底层序列表结构节点里保存 JSON 字段信息,通过节点之间的连接来表达 JSON 的层级关系,这个链表节点类型也是 cJSON 最核心最通用的类型,名字同样叫 cJSON 实现原理今天不展开,先看应用流程,

cJSON 的使用可以分成两大功能,1、打包 JSON 字符串,2、解释 JSON 字符串。先说打包,也就是生成 JSON 字符串。整体可以分三步

1、创建 cJSON 根对象,2、往根对象里添加字段类型,可以是字符串或数字,也可以是子对象。3、通过 cJSON_Print 把跟对象转换成字符串。

这里有两个内存释放点,一定要记住,1跟对象用完后要用 cJSON_Delete释放。2.cJSON_Print 返回的字符串也是。动态申请的,用完后调用cJSON_free 释放。再说解析,拿到json字符串后,先调用 cJSON_Parse,如果输入是合法 JSON 字符串,会返回cJSON 根对象取针,如果输入非法 JSON 字符串,会返回 NULL,解释成功后就可以按键级获取对应的子对象,再通过取值接口拿到最终数据。解释完成后,同样记得调用cJSON_delete释放跟对象。如果你习惯了其他高级语言,可能会觉得这种手动释放内存有些繁琐,但在C语言里,这基本已经是兼顾可读性与可控性的最优方案了。如果你感兴趣。可以在自己的板子上试着移植一下cJSON

posted @ 2026-05-13 17:38  lzeng02  阅读(28)  评论(0)    收藏  举报