1. 程式人生 > >關於STM32+RTOS+Json使用筆記

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