几乎全平台的C语言JSON解析工具cJSON[转载]

最近在做一个外设管理平台,用PYTHON写了一个连接管理,兼容串口和套接字的连接,然后抽象为设备统一管理。使用套接字时JSON是一种很好的数据封装类型,假设我需要远程操控一个设备,发送一个JSON的数据包就可以了,像这样:

{"command":"命令","args":[各种控制参数]}

当远端设备的接收程序是使用JAVA、PYTHON这种类型程序编写的时候,解析JSON格式一般不会有大的问题,但当远程设备是能使用C语言来编写时,如一些单片机,IOT等嵌入式设备时,难道手写解析工具?

幸好有神仙为我们做了这件事情,他的主页在这里:

https://github.com/DaveGamble

主角:

https://github.com/DaveGamble/cJSON

cJSON使用MIT许可证,使用起来还是很自由的,他为了兼容一些C语言编译器,编写时使用的是C89标准,这意味着类似C51之类的东西也可以编译其源代码。

一般情况下将其项目目录下的cJSON.c和cJSON.h复制到自己的项目目录下,使用即可。

注:需要动态开辟空间,事先需要支持或者实现malloc和free函数。

cJSON使用链式存储的结构,按照自己的数据格式逐层解析即可。

例如我要解析一个数据包来操控机械臂:

 1 {"command":"M","args":[750,750,750,750]}
 2 //先将json字符解析成cJSON结构体:
 3 cJSON *myJson = cJSON_Parse((const char *)USART_RX_BUF);
 4 //提取出"command"这个字段:
 5 char *command = cJSON_GetObjectItem(myJson,"command")->valuestring;
 6 //获取"args"字段的数组
 7 cJSON *args = cJSON_GetObjectItem(myJson,"args");
 8 //逐个获取其中的数值
 9 args_number = cJSON_GetArraySize(args);
10 for(count = 0; count < args_number;count++)
11 {
12 CurrentArgs[count] = cJSON_GetArrayItem(args,count)->valueint;
13 }

简单好用
————————————————
版权声明:本文为CSDN博主「soulburn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/soulburn/article/details/102685503

posted @ 2021-04-26 16:56  Sean_hn  阅读(619)  评论(0编辑  收藏  举报