struct2json的库来自 <struct2json: C结构体与 JSON 快速互转库,快速实现C结构体的序列化及反序列化> (该博主博客还有超多实用功能库!!!)
struct2json 是一个基于cJSON库开源的C结构体与 JSON 快速互转库,它可以快速实现 结构体对象 与 JSON 对象 之间序列化及反序列化要求。快速、简洁的 API 设计,大大降低直接使用 JSON 解析库来实现此类功能的代码复杂度。
下面是 struct2json 主要使用场景:
- 持久化 :结构体对象序列化为 JSON 对象后,可直接保存至文件、Flash,实现对结构体对象的掉电存储;
- 通信 :高级语言对JSON支持的很友好,例如:Javascript、Groovy 就对 JSON 具有原生的支持,所以 JSON 也可作为C语言与其他语言软件之间的通信协议格式及对象传递格式;
- 可视化 :序列化为 JSON 后的对象,可以更加直观的展示到控制台或者 UI 上,可用于产品调试、产品二次开发等场景;
注:目前主要初始化该库及cJSON库所需的内存管理方法。默认使用的 malloc 及 free 作为内存管理方法,如果使用默认内存管理方式,无需初始化。 1.如果裸机下使用,则不需要重新初始化,因为裸机对内存分配、释放,是默认使用 malloc 及 free 作为内存管理方法。 2.如果使用操作系统,或其他平台,就要先了解使用的操作系统或平台,它对于内存分配、释放,使用的是什么函数? 3.举以下例子,在STM32的FreeRTOS下使用cJSON库,重新定义cJSON的内存分配、释放demo.
|
注:cJSON库所需的内存管理方法,需要大量指针内存空间,在处理多级JSON嵌套、嵌套数组等等,如果芯片处理器的RAM不够,或者在操作系统分别的任务堆栈不够,回出现解析某些数据的时候直接返回空指针。 1.只要把当前任务的stacksz(注意它*4才是实际占用的字节数哦)设置到足够大就OK了。 2.我这里是1200,也就是4800字节,一般情况下的json参数设置也就够了。
|
如何使用struct2json?
1.如下声明了两个结构体,结构体 Hometown 是结构体 Student 的子结构体。
|
2.针对结构体内容,重新按照规则定义两个函数,分别将结构体对象序列化为 JSON 对象、将 JSON 对象反序列化为结构体对象。
|
3.stm32裸机下将结构体对象序列化为 JSON 对象demo。
|
4.具体怎么读出JOSN信息对象的键值,有以下两种思路
- 阅读《cJSON使用以及在stm32中的应用》,使用传统的cJSON代码,解出对象的键值。
- 利用struct2json库,通过接收josn信息,解出/组合成一个完成结构体,再从结构体一级级读取数值或字符串等等。
0积分下载
1.库文件,解压,放入自己工程,添加/.c/.h链接、路径即可使用。
https://download.csdn.net/download/human_cfr/88562288
2.Struct2json_API说明文件
cJSON使用以及在stm32中的应用
来自 <【C】cJSON使用以及在stm32中的应用-CSDN博客>
cJSON_github源码
来自 <GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C>
JSON格式详解
来自 <前端学习——JSON格式详解_前端json格式-CSDN博客>
cJSON学习笔记(解析JSON数据包/组装JSON数据包_最基本的用法)
来自 <cJSON学习笔记_【cjson】cjson学习笔记-CSDN博客>
来自 <https://www.cnblogs.com/chineseboy/p/3959852.html>
【开源代码阅读系列】之 cJSON
来自 <【精选】【开源代码阅读系列】之 cJSON_cjson_inithooks_daydayup_666的博客-CSDN博客>
基于STM32的FreeRTOS下使用cJSON库的坑