首先:版权声明:本文为博主原创文章,未经博主允许不得转载
先欣赏下边的内容
1.https://blog.youkuaiyun.com/u013184273/article/details/85047662
关于STM32移植cJson和FreeRTOS时,cjson解析和创建失败问题
2.https://blog.youkuaiyun.com/u013184273/article/details/79041527 【cJson】JSON的基本概念(一)
3. https://blog.youkuaiyun.com/u013184273/article/details/79041566 【cJson】 JSON格式详解(二)
4.https://blog.youkuaiyun.com/u013184273/article/details/79041225【cJson】cJSON学习笔记(三)
5.https://blog.youkuaiyun.com/u013184273/article/details/79041323【cJSON】CJSON学习笔记(四)
5.https://blog.youkuaiyun.com/u013184273/article/details/79041673【cJson】cJSON的构造和解析(五)
6.https://blog.youkuaiyun.com/u013184273/article/details/79044573 使用cJSON创建JSON字符串,举例详解。(六)
一.如果你正在使用关于STM32+RTOS+Json,那么请你看看
https://blog.youkuaiyun.com/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组,喜欢验证的朋友随时验证。