STM32嵌入式系统FreeRTOS使用cJSON解析和构建JSON

一、环境

控制器STM32F407+MDK5.34+cJSON1.7.7

二、安装cJSON

MDK中打开Pack Install,选择Generic下边MDK-Pack::cJSON,点击安装Install

安装成功后,在Manage Run-Time Environment 中找到Data Exchange,并选择cJSON,下方点击OK。

可以在工程栏目下看到已经添加了cJSON。

三、使用cJSON

(1)在需要使用的文件中,增加头文件#include "cJSON.h"

(2)使用了操作系统时,用操作系统的内存管理接口替换cJSON默认的内存分配,以FREERTOS为例,调用cJSON_InitHooks函数进行重新指定。

cJSON_Hooks cJSONhooks_freeRTOS;
cJSONhooks_freeRTOS.malloc_fn = pvPortMalloc;
cJSONhooks_freeRTOS.free_fn   = vPortFree;
cJSON_InitHooks(&cJSONhooks_freeRTOS);

(3)创建json对象并打印

cJSON *root,*fmt;
char *out;  
  
root=cJSON_CreateObject();

cJSON_AddItemToObject(root, "from", cJSON_CreateString("Jianwang16")); 
cJSON_AddItemToObject(root, "body", fmt=cJSON_CreateObject());
cJSON_AddStringToObject(fmt,"cmd", "start");
cJSON_AddNumberToObject(fmt,"port", 5100); 
cJSON_AddFalseToObject (fmt,"pwr");   
  
out=cJSON_PrintUnformatted(root);
OS_msgPrintf("size = %d string:%s


",strlen(out),out);

(4)cJSON几乎都是动态内存分配,所以使用json对象结束后需要清理内存,清理root对象即可,如果调用了cJSON打印,则需要清理打印输出的char 指针,例如:

cJSON_Delete(root); 
vPortFree(out);

四、测试样例和结果

经验分享 程序员 微信小程序 职场和发展