前面,博主已經講解了ArduinoJson庫的V5版本。爲了節省時間以及不討論重複內容,博主建議讀者先去閱讀一下 玩轉ArduinoJson庫 V5版本 。重點了解幾個東西:git
接下來,咱們直接進入V6版本的學習,儘可能和V5版本類比。json
假設讀者下載的V6版本的,那麼能夠參考 這裏 的API說明。讀者須要注意一下JsonDocument(可類比V5版本的JsonBuffer),由於V6版本的json操做都是在它上面。
對於開發者來講,使用JSON無非就是編碼或者解碼,因此博主也會分出兩種狀況來說解。
首先咱們來看看V6版本經常使用的百度腦圖:api
能夠看出,方法主要分爲三大類:數組
函數說明:
詳細能夠參考 wikiapp
/** * 解析json * @param doc jsondocument對象 * @param input 輸入內容 * @return DeserializationError 解析結果 */ // writable input => zero-copy DeserializationError deserializeJson(JsonDocument& doc, char* input); DeserializationError deserializeJson(JsonDocument& doc, char* input, size_t inputSize); // read-only input => duplication DeserializationError deserializeJson(JsonDocument& doc, const char* input); DeserializationError deserializeJson(JsonDocument& doc, const char* input, size_t inputSize); DeserializationError deserializeJson(JsonDocument& doc, const __FlashStringHelper* input); DeserializationError deserializeJson(JsonDocument& doc, const __FlashStringHelper* input, size_t inputSize); DeserializationError deserializeJson(JsonDocument& doc, const String& input); DeserializationError deserializeJson(JsonDocument& doc, const std::string& input); DeserializationError deserializeJson(JsonDocument& doc, Stream& input); DeserializationError deserializeJson(JsonDocument& doc, std::istream& input);
DeserializationError具體內容請參考 wiki函數
例子說明:工具
//Read-only input const char* json = "{\"hello\":\"world\"}"; StaticJsonDocument<200> doc; deserializeJson(doc, json); const char* world = doc["hello"]; //Zero-copy mode char json[] = "{\"hello\":\"world\"}"; StaticJsonDocument<200> doc; deserializeJson(doc, json); const char* world = doc["hello"]; //Raise the nesting limit char json[] = "[[[[[[[[[[[[[[[42]]]]]]]]]]]]]]]"; StaticJsonDocument<200> doc; deserializeJson(doc, json, DeserializationOption::NestingLimit(15));; int answer = doc[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0];
函數說明:
詳細能夠參考 wikioop
/** * 構造序列化json * @param doc jsondocument對象 * @param output 輸出內容 */ serializeJson(const JsonDocument& doc, char* output, size_t outputSize); serializeJson(const JsonDocument& doc, char output[size]); serializeJson(const JsonDocument& doc, Print& output); serializeJson(const JsonDocument& doc, String& output); serializeJson(const JsonDocument& doc, std::string& output); serializeJson(const JsonDocument& doc, std::ostream& output);
例子說明:學習
StaticJsonDocument<200> doc; doc["hello"] = "world"; serializeJson(doc, Serial);
打印結果:jsonp
{"hello":"world"}
注意:
函數說明:
詳細能夠參考 wiki
/** * 構造序列化json,格式化輸出 * @param doc jsondocument對象 * @param output 輸出內容 */ size_t serializeJsonPretty(const JsonDocument& doc, char* output, size_t outputSize); size_t serializeJsonPretty(const JsonDocument& doc, char output[size]); size_t serializeJsonPretty(const JsonDocument& doc, Print& output); size_t serializeJsonPretty(const JsonDocument& doc, String& output); size_t serializeJsonPretty(const JsonDocument& doc, std::string& output);
例子說明:
StaticJsonDocument<200> doc; doc["hello"] = "world"; serializeJsonPretty(doc, Serial);
打印結果:
{ "hello": "world" }
注意:
函數說明:
詳細能夠參考 wiki
/** * 計算構造序列化json的長度 * @param doc jsondocument對象 * @Note 關聯方法 serializeJson */ size_t measureJson(const JsonDocument& doc);
例子說明:
// Send headers client.println("Content-Type: application/json"); client.print("Content-Length: "); client.println(measureJson(doc)); // Terminate headers client.println(); // Send body serializeJson(doc, client);
函數說明:
詳細能夠參考 wiki
/** * 計算構造序列化格式化json的長度 * @param doc jsondocument對象 * @Note 關聯方法 serializeJsonPretty */ size_t measureJsonPretty(const JsonDocument& doc);
例子說明:
// Send headers client.println("Content-Type: application/json"); client.print("Content-Length: "); client.println(measureJsonPretty(doc)); // Terminate headers client.println(); // Send body serializeJsonPretty(doc, client);
JsonDocument做爲整個V6版本ArduinoJson庫的內存入口,負責處理整個json數據的內存管理,這是咱們須要首先重點關注的內容。
它包括兩個實現類:
StaticJsonDocument<256> doc;
DynamicJsonDocument doc(2048);
使用JsonDocument
當你建立一個JsonDocument以後,默認初始化爲空,調用 JsonDocument::isNull()會返回true,這個時候既能夠表明當作jsonObject,也能夠當作jsonArray,這取決於你插入第一個value的類型。
如下會做爲JsonObject使用:
DynamicJsonDocument doc(1024); doc["answer"] = 42; // the doc contains {"answer":42}
如下會做爲JsonArray使用:
DynamicJsonDocument doc(1024); doc.add(42); // the doc contains [42]
接下來,看看JsonDocument的一些經常使用方法:
函數說明:
/** * 獲取頂節點,並把它轉成T類型 * @return JsonArray/JsonObject/JsonVariant */ JsonArray as<JsonArray>(); JsonObject as<JsonObject>(); JsonVariant as<JsonVariant>();
例子說明:
DynamicJsonBuffer doc(1024); deserializeJson(doc, "{\"key\":\"value\")"); // get the JsonObject in the JsonDocument JsonObject root = doc.as<JsonObject>(); // get the value in the JsonObject const char* value = root["key"];
注意:
函數說明:
/** * 往jsondocument添加元素 * @param value 元素 */ // add the specified value to the array bool add(bool value); bool add(float value); bool add(double value); bool add(signed char value); bool add(signed long value); bool add(signed int value); bool add(signed short value); bool add(unsigned char value); bool add(unsigned long value); bool add(unsigned int value); bool add(unsigned short value); bool add(char *value); // see Remarks bool add(const char *value); bool add(const __FlashStringHelper *value); // see Remarks bool add(const String &value); // see Remarks bool add(const std::string &value); // see Remarks bool add(JsonArray array); bool add(JsonObject object); bool add(JsonVariant variant);
例子說明:
StaticJsonDocument<200> doc; array.add("hello"); // null -> ["hello"] array.add(3.14156); // ["hello"] -> ["hello",3.14156] serializeJson(doc, Serial);
打印結果:
["hello",3.14156]
注意:
函數說明:
/** * 清除JsonDocument並釋放內存空間 */ void clear();
注意:
函數說明:
/** * 建立空json數組,併爲它分配內存空間 * @param key key名稱 * @return JsonArray */ // similar to JsonArray::createNestedArray() JsonArray createNestedArray(); // similar to JsonObject::createNestedArray() JsonArray createNestedArray(char* key); JsonArray createNestedArray(const char* key); JsonArray createNestedArray(const __FlashStringHelper* key); JsonArray createNestedArray(const String& key); JsonArray createNestedArray(const std::string& key);
例子說明:
DynamicJsonDocument doc(1024); JsonArray ports = doc.createNestedArray("ports"); ports.add("80"); ports.add("443");
打印結果:
{ "ports": [ 80, 443 ] }
注意:
StaticJsonDocument<200> doc; JsonArray arr = doc.createNestedArray(); arr.add("hello world"); serializeJson(doc, Serial);
打印結果:
[["hello world"]]
StaticJsonDocument<200> doc; JsonArray array = doc.createNestedArray("hello"); array.add("world"); serializeJson(doc, Serial);
打印結果:
{"hello":["world"]}
函數說明:
/** * 建立空json對象,併爲它分配內存空間 * @param key key名稱 * @return JsonObject */ // similar to JsonArray::createNestedArray() // similar to JsonArray::createNestedObject() JsonObject createNestedObject(); // similar to JsonObject::createNestedObject() JsonObject createNestedObject(char* key); JsonObject createNestedObject(const char* key); JsonObject createNestedObject(const __FlashStringHelper* key); JsonObject createNestedObject(const String& key); JsonObject createNestedObject(const std::string& key);
例子說明:
DynamicJsonDocument doc(1024); JsonArray wifi = doc.createNestedObject("wifi"); wifi["SSID"] = "TheBatCave";
打印結果:
{ "wifi": { "SSID": "TheBatCave" } }
注意:
StaticJsonDocument<200> doc; JsonObject obj = doc.createNestedObject(); obj["hello"] = "world"; serializeJson(doc, Serial);
打印結果:
[{"hello":"world"}]
StaticJsonDocument<200> doc; JsonObject obj = doc.createNestedObject("nested"); obj["hello"] = "world"; serializeJson(doc, Serial);
打印結果:
{"nested":{"hello":"world"}}
函數說明:
/** * 獲取index位置/key的元素 * @param index 索引位置 * @return JsonVariant 若是找不到匹配的返回null */ JsonVariant getElement(size_t index);
函數說明:
/** * 獲取key對應的value * @param key 對應的key * @param JsonVariant key對應的value,若是不匹配返回null */ JsonVariant getMember(const char* key); JsonVariant getMember(String key); JsonVariant getMember(std::string key); JsonVariant getMember(const __FlashStringHelper* key);
函數說明:
/** * 獲取或者建立key對應的value * @param key 對應的key * @param JsonVariant key對應的value,若是不匹配返回null */ JsonVariant getOrCreateMember(const char* key); JsonVariant getOrCreateMember(String key); JsonVariant getOrCreateMember(std::string key); JsonVariant getOrCreateMember(const __FlashStringHelper* key);
注意:
函數說明:
/** * 快捷操做符 * @param key 對象中對應的key * @param index 數組中對應的索引 */ // mimics a JsonArray ElementProxy operator[](size_t index); // mimics a JsonObject MemberProxy operator[](const char* key); MemberProxy operator[](char* key); MemberProxy operator[](const String& key); MemberProxy operator[](const std::string& key); MemberProxy operator[](const __FlashStringHelper* key);
例子說明:
StaticJsonDocument<256> doc; doc["wifi"]["SSID"] = "TheBatCave";
打印內容:
{ "wifi": { "SSID": "TheBatCave" } }
函數說明:
/** * 判斷jsondocument是否爲空 */ bool isNull() const;
例子說明:
//Result is true DynamicJsonDocument doc(1024); doc.isNull(); // true serializeJson(doc, Serial); // prints "null" //Result is false DynamicJsonDocument doc(1024); doc.to<JsonArray>(); doc.isNull(); // false serializeJson(doc, Serial); // prints "[]"
函數說明:
/** * jsondocument已使用內存字節數 */ size_t memoryUsage() const;
例子說明:
char json[] = "{\"hello\":\"world\"}"; StaticJsonDocument<200> doc; deserializeJson(doc, json); Serial.println(doc.memoryUage()); // prints 26 on AVR
函數說明:
/** * jsondocument轉成T類型,T爲JsonArray、JsonObject、JsonVariant */ JsonArray to<JsonArray>(); JsonObject to<JsonObject>(); JsonVariant to<JsonVariant>();
例子說明:
// allocate the JsonDocument StaticJsonDocument<200> doc; // convert it to a JsonObject JsonObject root = doc.to<JsonObject>(); // set values root["hello"] = "world";
注意:
DynamicJsonBuffer doc(1024); JsonObject root1 = doc.to<JsonObject>(); JsonObject root2 = doc.to<JsonObject>(); // Don't use root1 here, because it's dangling!
在JsonDocument所構造出來的內存空間中,Json對象的入口就是JsonObject。
讓咱們看看它的經常使用操做方法:
函數說明:
/** * 返回一個迭代器,可用於對象中的全部鍵值對 */ JsonObject::iterator begin() const; JsonObject::iterator end() const;
例子說明:
char json[] = "{\"first\":\"hello\",\"second\":\"world\"}"; DynamicJsonDocument doc(1024); deserializeJson(doc, json); JsonObject root = doc.as<JsonObject>(); // using C++11 syntax (preferred): for (JsonPair kv : root) { Serial.println(kv.key().c_str()); Serial.println(kv.value().as<char*>()); } // using C++98 syntax (for older compilers): for (JsonObject::iterator it=root.begin(); it!=root.end(); ++it) { Serial.println(it->key().c_str()); Serial.println(it->value().as<char*>()); }
打印結果:
first hello second world
函數說明:
/** * 判斷對象是否包含某一個key * @param key key名字 * @return bool */ bool containsKey(const char* key) const; bool containsKey(const String& key) const; bool containsKey(const std::string& key) const; bool containsKey(const __FlashStringHelper& key) const;
例子說明:
StaticJsonDocument<256> doc; JsonObject root = doc.to<JsonObject>(); root["city"] = "Paris"; bool hasCity = root.containsKey("city"); // true bool hasCountry = root.containsKey("country"); // false }
注意:
if (root.containsKey("error")) { const char* error = root["error"] Serial.println(error); return; }
能夠改爲:
JsonVariant error = root["error"]; if (!error.isNull()) { Serial.println(error.as<char*>()); return; }
或者更加簡單快速的方法:
const char* error = root["error"]; if (error) { Serial.println(error); return; }
函數說明:
/** * 在當前對象中添加子key,子value爲json數組 * @param key key名字 * @return JsonArray */ JsonArray createNestedArray(char* key) const; JsonArray createNestedArray(const char* key) const; JsonArray createNestedArray(const __FlashStringHelper* key) const; JsonArray createNestedArray(const String& key) const; JsonArray createNestedArray(const std::string& key) const;
例子說明:
StaticJsonDocument<256> doc; JsonObject root = doc.to<JsonObject>(); root["status"] = "on"; JsonArray levels = root.createNestedArray("levels"); levels.add(10); levels.add(30); serializeJsonPretty(root, Serial);
打印結果:
{ "status": "on", "levels": [ 10, 20 ] }
函數說明:
/** * 在當前對象中添加子key,子value爲json對象 * @param key key名字 * @return JsonObject對象 */ JsonObject createNestedObject(char* key) const; JsonObject createNestedObject(const char* key) const; JsonObject createNestedObject(const __FlashStringHelper* key) const; JsonObject createNestedObject(const String& key) const; // see Remarks JsonObject createNestedObject(const std::string& key) const; // see Remarks
例子說明:
StaticJsonDocument<256> doc; JsonObject root = doc.to<JsonObject>(); root["city"] = "Paris"; JsonObject weather = root.createNestedObject("weather"); weather["temp"] = 14.2; weather["cond"] = "cloudy"; serializeJsonPretty(root, Serial);
打印結果:
{ "city": "Paris", "weather": { "temp": 14.20, "cond": "cloudy" } }
函數說明:
/** * 獲取對象中給到key的value * @param key key名字 * @return JsonVariant對象 */ JsonVariant getMember(const char* key) const; JsonVariant getMember(const __FlashStringHelper* key) const; JsonVariant getMember(const String& key) const; JsonVariant getMember(const std::string& key) const;
例子說明:
例子1:
//The key is not found char json[] = "{\"username\":\"the_duke\"}"; StaticJsonDocument<256> doc; deserializeJson(doc, json); JsonObject object = doc.as<JsonObject>(); JsonVariant password = object.getMember("password"); if (password.isNull()) { Serial.println(F("Error: password is missing")); }
打印結果:
Error: password is missing
例子2:
//The key is found char json[] = "{\"username\":\"the_duke\"}"; StaticJsonDocument<256> doc; deserializeJson(doc, json); JsonObject object = doc.as<JsonObject>(); JsonVariant username = object.getMember("username"); Serial.println(F("Your name is: ")); Serial.println(username.as<const char*>());
打印結果:
Your name is: the_duke
函數說明:
/** * 獲取對象中給到key的value,若是沒有就建立 * @param key key名字 * @return JsonVariant對象 */ JsonVariant getOrCreateMember(char* key) const; JsonVariant getOrCreateMember(const char* key) const; JsonVariant getOrCreateMember(const __FlashStringHelper* key) const; JsonVariant getOrCreateMember(const String& key) const; JsonVariant getOrCreateMember(const std::string& key) const;
函數說明:
/** * 判斷對象是否爲空 * @Note You can use this function to: * check if the object was successfully parsed, or * check if the object was successfully allocated. */ bool isNull() const;
例子說明:
//Example 1: parsing success: StaticJsonDocument<200> doc; deserializeJson(doc, "{\"hello\":\"world\"}"); JsonObject object = doc.as<JsonObject>(); Serial.println(object.isNull()); // false //Example 2: parsing failure: StaticJsonDocument<200> doc; deserializeJson(doc, "[\"hello\",\"world\"]"); JsonObject object = doc.as<JsonObject>(); Serial.println(object.isNull()); // true //Example 3: allocation success: StaticJsonDocument<200> doc; JsonObject object = doc.to<JsonObject>(); Serial.println(object.isNull()); // false //Example 4: allocation failure: StaticJsonDocument<1> doc; JsonObject object = doc.to<JsonObject>(); Serial.println(object.isNull()); // true
函數說明:
/** * get/set快捷方式 */ MemberProxy operator[](char* key) const; MemberProxy operator[](const char* key) const; MemberProxy operator[](const __FlashStringHelper* key) const; MemberProxy operator[](const String& key) const; MemberProxy operator[](const std::string& key) const;
例子說明:
//如下兩行代碼效果等同 JsonVariant value = object["key"]; JsonVariant value = object.getMember("key"); //如下兩行代碼效果等同 object["key"] = "value"; object.getOrCreateMember("key").set("value"); StaticJsonDocument<256> doc; JsonObject object = doc.to<JsonObject>(); object["hello"] = "world"; const char* world = object["hello"];
函數說明:
/** * 移除特定key和value * @param key key名 */ void remove(const char* key) const; void remove(const __FlashStringHelper* key) const; void remove(const String& key) const; void remove(const std::string& key) const;
例子說明:
JsonObject object = doc.to<JsonObject>(); object["A"] = 1; object["B"] = 2; object["C"] = 3; object.remove("B"); serializeJson(object, Serial);
打印結果:
{"A":1,"C":3}
注意:
函數說明:
/** * 把一個json對象的內容設置給當前json對象 */ bool set(JsonObjectConst obj) const;
函數說明:
/** * 返回對象鍵值對的個數 * @return size_t 個數 */ size_t size() const;
例子說明:
JsonObject object = doc.to<JsonObject>(); object["hello"] = "world"; Serial.println(object.size()); // 1
在JsonDocument所構造出來的內存空間中,Json數組的入口就是JsonArray。
讓咱們看看它的經常使用操做方法:
函數說明:
/** * 往數組中加入value * @param value 值 * @return bool 是否添加成功,若是返回false通常都是jsonbuffer沒有足夠的空間 */ bool add(bool value) const; bool add(float value) const; bool add(double value) const; bool add(signed char value) const; bool add(signed long value) const; bool add(signed int value) const; bool add(signed short value) const; bool add(unsigned char value) const; bool add(unsigned long value) const; bool add(unsigned int value) const; bool add(unsigned short value) const; bool add(const char *value) const; bool add(char *value) const; bool add(const __FlashStringHelper *value) const; bool add(const String &value) const; bool add(const std::string &value) const; bool add(JsonArray array) const; bool add(JsonObject object) const; bool add(JsonVariant variant) const;
例子說明:
StaticJsonDocument<200> doc; JsonArray array = doc.to<JsonArray>(); array.add("hello"); array.add(3.14156); serializeJson(doc, Serial);
打印結果:
["hello",3.14156]
函數說明:
/** * 返回一個迭代器,可用於數組中的全部對象 * @return iterator */ JsonArray::iterator begin() const; JsonArray::iterator end() const;
例子說明:
char json[] = "[\"one\",\"two\",\"three\"]"; DynamicJsonDocument doc(1024); deserializeJson(doc, json); JsonArray arr = doc.as<JsonArray>(); // using C++11 syntax (preferred): for (JsonVariant value : arr) { Serial.println(value.as<char*>()); } // using C++98 syntax (for older compilers): for (JsonArray::iterator it=arr.begin(); it!=arr.end(); ++it) { Serial.println(it->as<char*>()); }
打印結果:
one two three
函數說明:
/** * 添加json數組 * @return JsonArray json數組 */ JsonArray createNestedArray() const;
例子說明:
StaticJsonDocument<200> doc; JsonArray array = doc.to<JsonArray>(); array.add("hello"); JsonArray nested = array.createNestedArray(); nested.add("world"); serializeJson(array, Serial);
打印結果:
["hello",["world"]]
函數說明:
/** * 添加json對象 * @return JsonObject json對象 */ JsonObject createNestedObject() const;
例子說明:
StaticJsonDocument<200> doc; JsonArray array = doc.to<JsonArray>(); JsonObject nested = array.createNestedObject(); nested["hello"] = "world"; serializeJson(array, Serial);
打印結果:
[{"hello":"world"}]
函數說明:
/** * 獲取對應index的值 */ JsonVariant getElement(size_t index) const;;
函數說明:
/** * 判斷json數組是否爲空 * @Note You can use this function to: * check if the array was successfully parsed, or * check if the array was successfully allocated. */ bool isNull() const;
例子說明:
//Example 1: parsing success: StaticJsonDocument<200> doc; deserializeJson(doc, "[1,2]"); JsonArray array = doc.as<JsonArray>(); Serial.println(array.isNull()); // false //Example 2: parsing failure: StaticJsonDocument<200> doc; deserializeJson(doc, "{1,2}"); JsonArray array = doc.as<JsonArray>(); Serial.println(array.isNull()); // true //Example 3: allocation success: StaticJsonDocument<200> doc; JsonArray array = doc.to<JsonArray>(); Serial.println(array.isNull()); // false //Example 4: allocation failure: StaticJsonDocument<1> doc; JsonArray array = doc.to<JsonArray>(); Serial.println(array.isNull()); // true
函數說明:
/** * set/get快捷方式 */ ElementProxy operator[](size_t index) const;
例子說明:
//如下兩句代碼含義同樣 JsonVariant value = array[0]; JsonVariant value = array.getElement(0); //如下兩句代碼含義同樣 array[0] = "value"; array.getElement(0).set("value"); JsonArray array = doc.to<JsonArray>(); array.add(42); int value = array[0]; array[0] = 666;
函數說明:
/** * 移除某一個index位置的元素 * @param index 索引 */ void remove(size_t index) const;
例子說明:
JsonArray array = doc.to<JsonArray>(); array.add("A"); array.add("B"); array.add("C"); array.remove(1); serializeJson(array, Serial);
打印結果:
["A","C"]
注意:
函數說明:
/** *用另外一個jsonArray代替當前jsonArray */ bool set(JsonArrayConst src) const;
函數說明:
/** * 返回json數組元素的個數 * @return size_t 個數 */ size_t size() const;
例子說明:
JsonArray array = doc.to<JsonArray>(); array.add("hello"); array.add("world"); Serial.println(array.size()); // 2
實驗材料:
例子代碼:
/** * 編寫Json字符串 * @author 單片機菜鳥 * @date 2019/06/02 */ #include <ArduinoJson.h> void setup() { Serial.begin(115200); while (!Serial) continue; // Json對象對象樹的內存工具 靜態buffer // 200 是大小 若是這個Json對象更加複雜,那麼就須要根據須要去增長這個值. StaticJsonDocument<200> doc; // StaticJsonDocument 在棧區分配內存 它也能夠被 StaticJsonDocument(內存在堆區分配) 代替 // DynamicJsonDocument doc(200); // Add values in the document // doc["sensor"] = "gps"; doc["time"] = 1351824120; // Add an array. // JsonArray data = doc.createNestedArray("data"); data.add(48.756080); data.add(2.302038); // Generate the minified JSON and send it to the Serial port. // serializeJson(doc, Serial); // The above line prints: // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} // Start a new line Serial.println(); // The above line prints: // { // "sensor": "gps", // "time": 1351824120, // "data": [ // 48.756080, // 2.302038 // ] // } } void loop() { // not used in this example }
實驗材料:
例子代碼
/** * 解析Json字符串 * @author 單片機菜鳥 * @date 2019/06/02 */ #include <ArduinoJson.h> void setup() { Serial.begin(115200); while (!Serial) continue; // Json對象對象樹的內存工具 靜態buffer // 200 是大小 若是這個Json對象更加複雜,那麼就須要根據須要去增長這個值. StaticJsonDocument<200> doc; // StaticJsonDocument 在棧區分配內存 它也能夠被 StaticJsonDocument(內存在堆區分配) 代替 // DynamicJsonDocument doc(200); char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; // Add an array. // // Deserialize the JSON document DeserializationError error = deserializeJson(doc, json); // Test if parsing succeeds. if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.c_str()); return; } // Fetch values. // // Most of the time, you can rely on the implicit casts. // In other case, you can do doc["time"].as<long>(); const char* sensor = doc["sensor"]; long time = doc["time"]; double latitude = doc["data"][0]; double longitude = doc["data"][1]; // Print values. Serial.println(sensor); Serial.println(time); Serial.println(latitude, 6); Serial.println(longitude, 6); } void loop() { // not used in this example }
注意:
請參考V5版本說明,很是相似。
自此,V5和V6版本已經講解完畢,往讀者深刻體會一下,其實也是很是簡單的用法。