在使用ESP32進行JSON數據處理時,我們要注意JSON的最大長度限制。ESP32的JSON庫使用了一個叫做cJSON的開源庫。
const int JSON_BUFFER_SIZE = 1024;
char jsonBuffer[JSON_BUFFER_SIZE];
cJSON* root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "key", "value");
...
// 將cJSON對象轉為JSON格式存儲到jsonBuffer中
char* jsonStr = cJSON_Print(root);
strncpy(jsonBuffer, jsonStr, JSON_BUFFER_SIZE-1);
free(jsonStr);
由于ESP32的內存資源有限,因此我們需要注意JSON串的最大長度。在上面的例子中,我們定義了一個JSON_BUFFER_SIZE,限制了存儲JSON串的最大字節數。如果JSON串超過了這個限制,就可能導致ESP32運行時出現異常。
而對于較大的JSON數據,我們可以采用流式存儲的方式,每次處理一部分數據,避免一次性處理過多的數據。
cJSON* root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "key1", "value1");
...
// 開啟JSON對象的流式存儲
cJSON* streamRoot = cJSON_CreateObject();
cJSON* streamData = cJSON_AddObjectToObject(streamRoot, "data");
cJSON_AddItemToObject(streamData, "jsonData", root);
cJSON_Delete(root);
...
// 將cJSON對象轉為JSON格式并輸出到串口
cJSON_print(streamRoot,Serial);
cJSON_Delete(streamRoot);
在上述代碼中,我們開啟了JSON對象流式存儲之后,將每次處理的JSON數據存儲到streamData對象中,最終把整個streamRoot對象轉為JSON格式并輸出到串口。這樣,我們就可以避免一次性處理過多的數據,減少了內存開銷,提高了代碼穩定性。
上一篇vue向cookie取值
下一篇c 中json串解析