几乎全平台的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使用链式存储的结构,按照自己的数据格式逐层解析即可。

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

{"command":"M","args":[750,750,750,750]}

//先将json字符解析成cJSON结构体:

cJSON *myJson = cJSON_Parse((const char *)USART_RX_BUF);

//提取出"command"这个字段:

char *command = cJSON_GetObjectItem(myJson,"command")->valuestring;

//获取"args"字段的数组

cJSON *args = cJSON_GetObjectItem(myJson,"args");

//逐个获取其中的数值

args_number = cJSON_GetArraySize(args);

for(count = 0; count < args_number;count++)
{
    CurrentArgs[count] = cJSON_GetArrayItem(args,count)->valueint;
}

简单好用

发布了2 篇原创文章 · 获赞 0 · 访问量 64

猜你喜欢

转载自blog.csdn.net/soulburn/article/details/102685503