关于STM32+RTOS+Json使用笔记

首先:版权声明:本文为博主原创文章,未经博主允许不得转载

先欣赏下边的内容

1.https://blog.csdn.net/u013184273/article/details/85047662

关于STM32移植cJson和FreeRTOS时,cjson解析和创建失败问题

2.https://blog.csdn.net/u013184273/article/details/79041527 【cJson】JSON的基本概念(一)

3. https://blog.csdn.net/u013184273/article/details/79041566 【cJson】 JSON格式详解(二)

4.https://blog.csdn.net/u013184273/article/details/79041225【cJson】cJSON学习笔记(三)

5.https://blog.csdn.net/u013184273/article/details/79041323【cJSON】CJSON学习笔记(四)

5.https://blog.csdn.net/u013184273/article/details/79041673【cJson】cJSON的构造和解析(五)

6.https://blog.csdn.net/u013184273/article/details/79044573   使用cJSON创建JSON字符串,举例详解。(六)

一.如果你正在使用关于STM32+RTOS+Json,那么请你看看

https://blog.csdn.net/u013184273/article/details/84870672,是不是你遇到的问题。

二:由于博主不细心,就遇到了以下问题

比如:

打印固定数组

void CS_cJson(void)
{

    u8 i;

   char *out;
    cJSON *cJson_obj = NULL;

   cJSON *cJson_array = NULL;

   cJson_obj= cJSON_CreateObject();

cJSON *cJson_obj_item = NULL;

cJson_obj_item = cJSON_CreateObject();

  cJson_array = cJSON_CreateArray();

if(!cJson_obj)

cJSON_Delete(cJson_obj);

cJSON_AddItemToObject(cJson_obj,"autodev"cJson_array )
    for(i = 0; i < 8; i++)
    {

           cJSON_AddItemToArray(cJson_array ,cJson_obj_item );
            cJSON_AddStringToObject(cJson_obj_item ,"code","1");
            cJSON_AddStringToObject(cJson_obj_item ,"state","开");
           
        }
    }

out = cJSON_Print(cJson_obj);

}

这样创建,有问题吗?没有,但是打印不出来;为什么呢?

因为cJson_obj_item = cJSON_CreateObject();你只创建了一次,但是你使用了8次,每个节点都要分配不同的内存空间来存放数据,不能重复使用,如果作为数组的item,那么每个都需要分配。

将代码改为:

void CS_cJson(void)
{

    u8 i;

   char *out;
    cJSON *cJson_obj = NULL;

   cJSON *cJson_array = NULL;

   cJson_obj= cJSON_CreateObject();

cJSON *cJson_obj_item = NULL;

  cJson_array = cJSON_CreateArray();

if(!cJson_obj)

cJSON_Delete(cJson_obj);

cJSON_AddItemToObject(cJson_obj,"autodev"cJson_array )
    for(i = 0; i < 8; i++)
    {

          cJson_obj_item = cJSON_CreateObject();

           cJSON_AddItemToArray(cJson_array ,cJson_obj_item );
            cJSON_AddStringToObject(cJson_obj_item ,"code","1");
            cJSON_AddStringToObject(cJson_obj_item ,"state","开");
           
        }
    }

out = cJSON_Print(cJson_obj);

}

打印出来就是

{"autodev":[{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"},{"code":"1","cmd":"开"}]}

正好8组,喜欢验证的朋友随时验证。

猜你喜欢

转载自blog.csdn.net/u013184273/article/details/85047662