一、环境

控制器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);

四、测试样例和结果

GitHub 加速计划 / cj / cJSON
10.45 K
3.16 K
下载
Ultralightweight JSON parser in ANSI C
最近提交(Master分支:2 个月前 )
424ce4ce This reverts commit 5b502cdbfb21fbe5f6cf9ffbd2b96e4281a741e6. Related to #860 4 个月前
32497300 - 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐