關於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組,喜歡驗證的朋友隨時驗證。