ArduinoJSON:序列化和反序列化
顧名思義,ArduinoJSON 庫可以幫助你在 Arduino 上處理 JSON 物件。要安裝它,請轉到庫管理器,搜尋 ArduinoJSON。安裝 Benoit Blanchon 編寫的庫。

這是文件非常完善的庫之一。事實上,它有自己的網站:https://arduinojson.org/。你可以在這個網站上找到許多問題的答案。
在本文中,我們將學習如何使用這個庫進行序列化(生成 JSON 文件)和反序列化(解析 JSON 文件)。
序列化
讓我們從序列化開始。它非常簡單。如果你使用過 Python,這段程式碼看起來會更加熟悉。
下載 ArduinoJSON 庫後,轉到 - 檔案→示例→ArduinoJSON
對於序列化,我們應該檢視的示例是 JsonGeneratorExample。你會注意到程式碼中有大量註釋,建議你仔細閱讀這些註釋。
沒有註釋的程式碼如下所示:
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
while (!Serial) continue;
StaticJsonDocument<200> doc;
doc["sensor"] = "gps";
doc["time"] = 1351824120;
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
serializeJson(doc, Serial);
Serial.println();
serializeJsonPretty(doc, Serial);
}
void loop() {
}輸出
這段程式碼或多或少是自解釋的。序列埠監視器的輸出如下所示:

需要注意幾點:
向 JSON 新增鍵值對的語法是:doc_name[key] = value。JsonArray 型別用於將陣列作為任何鍵的值新增。上面的程式碼很好地解釋了這一點(對於鍵“data”)。
serializeJSON 接受兩個引數:JSON 文件和目標緩衝區。因此,你可以使用以下程式碼,而不是直接列印到序列埠:
serializeJson(doc, serializedJSON); Serial.println(serializedJSON);
輸出結果將相同。
反序列化
反序列化是序列化的逆過程。你有一個 JSON 文件(它可以來自任何來源,例如序列埠、Web 伺服器等),並且你希望解析它。轉到 - 檔案 → 示例 → ArduinoJSON 並開啟 JsonParserExample。同樣,這是一個註釋豐富的程式碼,建議你閱讀示例中的註釋。
示例
沒有註釋的程式碼如下:
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
while (!Serial) continue;
StaticJsonDocument<200> doc;
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
DeserializationError error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
Serial.println(sensor);
Serial.println(time);
Serial.println(latitude, 6);
Serial.println(longitude, 6);
}
void loop() {
}輸出
序列埠監視器的輸出為:

如你所見,反序列化的語法是 deserializeJson(doc, json),如果發生任何錯誤,它會返回錯誤。它接受兩個引數:用於儲存反序列化輸出的 JSON 文件和包含 JSON 內容的緩衝區。
獲得反序列化內容後,提取內容的語法如下:
data_type var_name = doc[key]
建議你閱讀其他 ArduinoJSON 示例。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP