一、环境
控制器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\r\n\r\n\r\n",strlen(out),out);
(4)cJSON几乎都是动态内存分配,所以使用json对象结束后需要清理内存,清理root对象即可,如果调用了cJSON打印,则需要清理打印输出的char 指针,例如:
cJSON_Delete(root);
vPortFree(out);
四、测试样例和结果