cJSON在STM32中的应用

写在前面:

将JSON应用在STM32上面已经很普遍了,但还是有很多问题在网上找不到答案,毕竟自己造轮子和找轮子造车还是有点差别。

今天就总结一下最近在STM32上使用cJSON所遇到的一些问题。

 

-------------------------------------------正文开始线-----------------------------------------------

  • 什么是cJSON:

JSON的C语言版,一种常用的轻量级数据交换格式,详情见  JSON介绍

 

  • cJSON在STM32中的使用:

  1. 创建一个JSON对象,并加入数据。

  2. JSON对象转换为字符串。

  3. 将字符串解析为JSON对象,并从中取数据。

 

  • 实例

创建JSON对象,并向其中加入数据。

//创建json对象
cJSON *info; 
info=cJSON_CreateObject();
 
//添加数据
cJSON_AddStringToObject(info,"sex","male");
cJSON_AddNumberToObject(info,"age",20);
cJSON_AddStringToObject(info,"name","weijun");

 

将JSON对象转换成字符串

//字符指针
char *jsonStr;
//转换函数
jsonStr=cJSON_Print(info);

 

将字符串转换成JSON并取数据

//创建JSON对象
cJSON *root;
cJSON *name;
char *exeStr;
 
//解析字符串
root = cJSON_Parse(data);
if (!root) {
    printf("get root faild !\n");
    printf("Error before: [%s]\n", cJSON_GetErrorPtr());
}
 
//获取数据
name = cJSON_GetObjectItem(root, "name");
if (!name) {
    printf("get name faild !\n");
    printf("Error before: [%s]\n", cJSON_GetErrorPtr());
}
 
//转移数据到指针
exeStr = (char*)malloc(strlen(name->valuestring));
sprintf(exeStr, "%s", name->valuestring);
 
//内存回收
cJSON_Delete(root);

 

  • 填坑

对于绝大多数的STM32开发板,创建JSON对象、添加数据、将JSON转换为字符串是不会有问题的。

但是,使用cJSON_Parse()函数时会出错,什么数据都读不出来,究其原因,还是开发板内存不够,经不起JSON的折腾。

但是呢,解决办法也很简单,如下图。

修改启动文件中的Stack_Size和Heap_Size 。下图并不严谨,只是想说把堆栈的内存调大一些,再去编译基本就通过了。

Stack_Size      EQU     0x00002000
 
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
                                                  
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
 
Heap_Size       EQU     0x00004000

 

posted @   SymPny  阅读(1095)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示