cJSON在STM32中的应用

写在前面:

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

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

 

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

  • 什么是cJSON:

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

 

  • cJSON在STM32中的使用:

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

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

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

 

  • 实例

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


   
  1. //创建json对象
  2. cJSON *info;
  3. info= cJSON_CreateObject();
  4. //添加数据
  5. cJSON_AddStringToObject(info, "sex", "male");
  6. cJSON_AddNumberToObject(info, "age", 20);
  7. cJSON_AddStringToObject(info, "name", "weijun");

 

将JSON对象转换成字符串


   
  1. //字符指针
  2. char *jsonStr;
  3. //转换函数
  4. jsonStr= cJSON_Print(info);

 

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


   
  1. //创建JSON对象
  2. cJSON *root;
  3. cJSON *name;
  4. char *exeStr;
  5. //解析字符串
  6. root = cJSON_Parse(data);
  7. if (!root) {
  8. printf( "get root faild !\n");
  9. printf( "Error before: [%s]\n", cJSON_GetErrorPtr());
  10. }
  11. //获取数据
  12. name = cJSON_GetObjectItem(root, "name");
  13. if (!name) {
  14. printf( "get name faild !\n");
  15. printf( "Error before: [%s]\n", cJSON_GetErrorPtr());
  16. }
  17. //转移数据到指针
  18. exeStr = ( char*) malloc( strlen(name->valuestring));
  19. sprintf(exeStr, "%s", name->valuestring);
  20. //内存回收
  21. cJSON_Delete(root);

 

  • 填坑

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

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

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

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


   
  1. Stack_ Size EQU 0x 00002000
  2. AREA STACK, NOINIT, READWRITE, ALIGN = 3
  3. Stack_Mem SPACE Stack_ Size
  4. __ initial_sp
  5. ; <h > Heap Configuration
  6. ; <o > Heap Size ( in Bytes) < 0x 0- 0xFFFFFFFF: 8 >
  7. ; < /h >
  8. Heap_ Size EQU 0x 00004000

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值