几乎全平台的C语言JSON解析工具cJSON[转载]
最近在做一个外设管理平台,用PYTHON写了一个连接管理,兼容串口和套接字的连接,然后抽象为设备统一管理。使用套接字时JSON是一种很好的数据封装类型,假设我需要远程操控一个设备,发送一个JSON的数据包就可以了,像这样:
{"command":"命令","args":[各种控制参数]}
当远端设备的接收程序是使用JAVA、PYTHON这种类型程序编写的时候,解析JSON格式一般不会有大的问题,但当远程设备是能使用C语言来编写时,如一些单片机,IOT等嵌入式设备时,难道手写解析工具?
幸好有神仙为我们做了这件事情,他的主页在这里:
主角:
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