几乎全平台的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;
}

简单好用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值