From 469daf969869a2dccac491a91b87841c683f2c36 Mon Sep 17 00:00:00 2001 From: suwatchai Date: Mon, 19 Aug 2019 22:45:26 +0700 Subject: [PATCH] Update FirebaseJson, add FirebaseJson to FirebaseData and StreamData --- README.md | 2 +- examples/Basic/Basic.ino | 30 ++++++++- .../Basic_with_rootCA/Basic_with_rootCA.ino | 30 ++++++++- examples/Blob/Blob.ino | 26 +++++++- examples/Blynk/Blynk.ino | 29 ++++++++- examples/Data_filter/Data_filter.ino | 26 +++++++- .../Different_objects_stream.ino | 27 +++++++- examples/ETag/ETag.ino | 32 ++++++++-- examples/Line_notify/Line_notify.ino | 31 +++++++++- examples/Priority/Priority.ino | 28 ++++++++- examples/Retry_and_queue/Retry_and_queue.ino | 30 ++++++++- examples/Stream/Stream.ino | 28 ++++++++- examples/Stream_callback/Stream_callback.ino | 61 +++++++++++++++++-- library.properties | 2 +- src/FirebaseESP8266.cpp | 26 ++++++++ src/FirebaseESP8266.h | 17 +++++- src/FirebaseJson.cpp | 11 +++- src/FirebaseJson.h | 6 +- src/README.md | 46 ++++++++++++-- 19 files changed, 450 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index f6c170f4..e9e35741 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Firebase Realtime Database Arduino Library for ESP8266 -Google's Firebase Realtime Database Arduino Library for ESP8266 v 2.4.0 +Google's Firebase Realtime Database Arduino Library for ESP8266 v 2.4.1 This library supports ESP8266 MCU from Espressif. The following are platforms which library are also available. diff --git a/examples/Basic/Basic.ino b/examples/Basic/Basic.ino index 8940e1b6..67c23675 100644 --- a/examples/Basic/Basic.ino +++ b/examples/Basic/Basic.ino @@ -23,6 +23,8 @@ //Define FirebaseESP8266 data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + void setup() { @@ -84,7 +86,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -121,7 +123,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -214,7 +216,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -231,3 +233,25 @@ void setup() void loop() { } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} \ No newline at end of file diff --git a/examples/Basic_with_rootCA/Basic_with_rootCA.ino b/examples/Basic_with_rootCA/Basic_with_rootCA.ino index d680aa0a..b0566737 100644 --- a/examples/Basic_with_rootCA/Basic_with_rootCA.ino +++ b/examples/Basic_with_rootCA/Basic_with_rootCA.ino @@ -47,6 +47,8 @@ const char root_ca[] PROGMEM = "-----BEGIN CERTIFICATE-----\n" //Define FirebaseESP8266 data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + void setup() { @@ -120,7 +122,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -157,7 +159,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -248,7 +250,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -265,3 +267,25 @@ void setup() void loop() { } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Blob/Blob.ino b/examples/Blob/Blob.ino index a55ea7c0..5c9a701e 100644 --- a/examples/Blob/Blob.ino +++ b/examples/Blob/Blob.ino @@ -27,6 +27,8 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + String path = "/ESP8266_Test"; void setup() @@ -164,7 +166,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); else if (firebaseData.dataType() == "blob") { @@ -204,3 +206,25 @@ void setup() void loop() { } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} \ No newline at end of file diff --git a/examples/Blynk/Blynk.ino b/examples/Blynk/Blynk.ino index 18a2cbb3..1dc6f97d 100644 --- a/examples/Blynk/Blynk.ino +++ b/examples/Blynk/Blynk.ino @@ -34,6 +34,8 @@ FirebaseData firebaseData1; FirebaseData firebaseData2; +void printJsonObjectContent(FirebaseData &data); + String path = "/Blynk_Test/Int"; //D4 or GPIO2 on Wemos D1 mini @@ -138,7 +140,7 @@ void loop() else if (firebaseData1.dataType() == "string") Serial.println(firebaseData1.stringData()); else if (firebaseData1.dataType() == "json") - Serial.println(firebaseData1.jsonData()); + printJsonObjectContent(firebaseData1); Serial.println("------------------------------------"); Serial.println(); } @@ -167,7 +169,7 @@ BLYNK_WRITE(V1) else if (firebaseData2.dataType() == "string") Serial.println(firebaseData2.stringData()); else if (firebaseData2.dataType() == "json") - Serial.println(firebaseData2.jsonData()); + printJsonObjectContent(firebaseData2); Serial.println("------------------------------------"); Serial.println(); } @@ -178,4 +180,27 @@ BLYNK_WRITE(V1) Serial.println("------------------------------------"); Serial.println(); } +} + + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } } \ No newline at end of file diff --git a/examples/Data_filter/Data_filter.ino b/examples/Data_filter/Data_filter.ino index 52d0fc5f..0d09fa66 100644 --- a/examples/Data_filter/Data_filter.ino +++ b/examples/Data_filter/Data_filter.ino @@ -25,6 +25,8 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + void setup() { @@ -113,7 +115,7 @@ void setup() Serial.println("PASSED"); Serial.println("JSON DATA: "); - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -132,3 +134,25 @@ void setup() void loop() { } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Different_objects_stream/Different_objects_stream.ino b/examples/Different_objects_stream/Different_objects_stream.ino index 60a379fa..23287cf6 100644 --- a/examples/Different_objects_stream/Different_objects_stream.ino +++ b/examples/Different_objects_stream/Different_objects_stream.ino @@ -29,6 +29,8 @@ FirebaseData firebaseData1; FirebaseData firebaseData2; +void printJsonObjectContent(FirebaseData &data); + unsigned long sendDataPrevMillis1; uint16_t count1; @@ -110,7 +112,7 @@ void loop() else if (firebaseData2.dataType() == "string") Serial.println(firebaseData2.stringData()); else if (firebaseData2.dataType() == "json") - Serial.println(firebaseData2.jsonData()); + printJsonObjectContent(firebaseData2); else if (firebaseData2.dataType() == "blob") { std::vector blob = firebaseData2.blobData(); @@ -166,4 +168,27 @@ void loop() Serial.println(ESP.getFreeHeap()); Serial.println(); } +} + + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } } \ No newline at end of file diff --git a/examples/ETag/ETag.ino b/examples/ETag/ETag.ino index fc28bbb5..c6583423 100644 --- a/examples/ETag/ETag.ino +++ b/examples/ETag/ETag.ino @@ -25,6 +25,8 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + void setup() { @@ -74,7 +76,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -108,7 +110,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -142,7 +144,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -171,7 +173,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); } Serial.println("------------------------------------"); @@ -201,3 +203,25 @@ void setup() void loop() { } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Line_notify/Line_notify.ino b/examples/Line_notify/Line_notify.ino index 5dba1a46..59db994b 100644 --- a/examples/Line_notify/Line_notify.ino +++ b/examples/Line_notify/Line_notify.ino @@ -29,8 +29,11 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + //Use shared WiFi client -WiFiClientSecure client = firebaseData.getWiFiClient(); +//For ESP Core SDK v2.5.x +BearSSL::WiFiClientSecure client = firebaseData.getWiFiClient(); String path = "/ESP8266_Test"; @@ -108,7 +111,7 @@ void loop() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -223,8 +226,30 @@ void loop() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Priority/Priority.ino b/examples/Priority/Priority.ino index 4cb31b6c..978480f9 100644 --- a/examples/Priority/Priority.ino +++ b/examples/Priority/Priority.ino @@ -26,6 +26,8 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + FirebaseJson json; void setup() @@ -80,7 +82,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -108,7 +110,7 @@ void setup() Serial.println("PASSED"); Serial.println("JSON DATA: "); - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -123,4 +125,26 @@ void setup() void loop() { +} + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } } \ No newline at end of file diff --git a/examples/Retry_and_queue/Retry_and_queue.ino b/examples/Retry_and_queue/Retry_and_queue.ino index 12738bec..cdecc2f6 100644 --- a/examples/Retry_and_queue/Retry_and_queue.ino +++ b/examples/Retry_and_queue/Retry_and_queue.ino @@ -24,6 +24,8 @@ //Define Firebase Data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + String path = "/ESP8266_Test"; std::vector myblob; @@ -161,7 +163,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); else if (firebaseData.dataType() == "blob") { @@ -218,7 +220,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -256,7 +258,7 @@ void setup() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); mydouble = 0; @@ -358,3 +360,25 @@ void loop() } } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Stream/Stream.ino b/examples/Stream/Stream.ino index 8d5633af..fa1a17c0 100644 --- a/examples/Stream/Stream.ino +++ b/examples/Stream/Stream.ino @@ -22,6 +22,8 @@ //Define FirebaseESP8266 data object FirebaseData firebaseData; +void printJsonObjectContent(FirebaseData &data); + unsigned long sendDataPrevMillis = 0; String path = "/ESP8266_Test/Stream"; @@ -88,7 +90,7 @@ void loop() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } @@ -151,8 +153,30 @@ void loop() else if (firebaseData.dataType() == "string") Serial.println(firebaseData.stringData()); else if (firebaseData.dataType() == "json") - Serial.println(firebaseData.jsonData()); + printJsonObjectContent(firebaseData); Serial.println("------------------------------------"); Serial.println(); } } + +void printJsonObjectContent(FirebaseData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} diff --git a/examples/Stream_callback/Stream_callback.ino b/examples/Stream_callback/Stream_callback.ino index 59bec84c..3cdff529 100644 --- a/examples/Stream_callback/Stream_callback.ino +++ b/examples/Stream_callback/Stream_callback.ino @@ -24,6 +24,9 @@ FirebaseData firebaseData1; FirebaseData firebaseData2; +void printJsonObjectContent(FirebaseData &data); +void printJsonObjectContent2(StreamData &data); + unsigned long sendDataPrevMillis = 0; String path = "/ESP8266_Test/Stream"; @@ -50,7 +53,7 @@ void streamCallback(StreamData data) else if (data.dataType() == "string") Serial.println(data.stringData()); else if (data.dataType() == "json") - Serial.println(data.jsonData()); + printJsonObjectContent2(data); else if (data.dataType() == "blob") { //See blob examples @@ -109,8 +112,11 @@ void loop() count++; Serial.println("------------------------------------"); - Serial.println("Set string..."); - if (Firebase.setString(firebaseData2, path + "/String", "Hello World! " + String(count))) + Serial.println("Set JSON..."); + + FirebaseJson json; + json.addString("data","hello").addInt("num", count); + if (Firebase.setJSON(firebaseData2, path + "/Json", json)) { Serial.println("PASSED"); Serial.println("PATH: " + firebaseData2.dataPath()); @@ -127,7 +133,7 @@ void loop() else if (firebaseData2.dataType() == "string") Serial.println(firebaseData2.stringData()); else if (firebaseData2.dataType() == "json") - Serial.println(firebaseData2.jsonData()); + printJsonObjectContent(firebaseData2); Serial.println("------------------------------------"); Serial.println(); } @@ -141,3 +147,50 @@ void loop() } } + +void printJsonObjectContent(FirebaseData &data){ + + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + Serial.println(data.jsonData()); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} + +void printJsonObjectContent2(StreamData &data){ + size_t tokenCount = data.jsonObject().parse(false).getJsonObjectIteratorCount(); + String key; + String value; + FirebaseJsonObject jsonParseResult; + Serial.println(); + for (size_t i = 0; i < tokenCount; i++) + { + data.jsonObject().jsonObjectiterator(i,key,value); + jsonParseResult = data.jsonObject().parseResult(); + Serial.print("KEY: "); + Serial.print(key); + Serial.print(", "); + Serial.print("VALUE: "); + Serial.print(value); + Serial.print(", "); + Serial.print("TYPE: "); + Serial.println(jsonParseResult.type); + + } +} + diff --git a/library.properties b/library.properties index edf1a50f..06ad4826 100644 --- a/library.properties +++ b/library.properties @@ -1,6 +1,6 @@ name=Firebase ESP8266 Client -version=2.4.0 +version=2.4.1 author=Mobizt diff --git a/src/FirebaseESP8266.cpp b/src/FirebaseESP8266.cpp index 7dadf99f..ec082207 100644 --- a/src/FirebaseESP8266.cpp +++ b/src/FirebaseESP8266.cpp @@ -5308,6 +5308,16 @@ String FirebaseData::jsonData() return String(); } +FirebaseJson &FirebaseData::jsonObject() +{ + if (_data.length() > 0 && _dataType == FirebaseESP8266::FirebaseDataType::JSON){ + _json.setJsonData(_data); + return _json;; + } else{ + return _json; + } +} + std::vector FirebaseData::blobData() { if (_blob.size() > 0 && _dataType == FirebaseESP8266::FirebaseDataType::BLOB) @@ -5420,6 +5430,7 @@ int FirebaseData::httpCode() StreamData::StreamData() { } + StreamData::~StreamData() { empty(); @@ -5485,12 +5496,27 @@ String StreamData::stringData() String StreamData::jsonData() { + if (_dataType == FirebaseESP8266::FirebaseDataType::JSON) return _data.c_str(); else return std::string().c_str(); } + +FirebaseJson &StreamData::jsonObject() +{ + if (_dataType == FirebaseESP8266::FirebaseDataType::JSON) + { + _json->setJsonData(_data); + return *_json; + } else{ + return *_json; + } +} + + + String StreamData::dataType() { return _dataTypeStr.c_str(); diff --git a/src/FirebaseESP8266.h b/src/FirebaseESP8266.h index 3c330287..05329f91 100644 --- a/src/FirebaseESP8266.h +++ b/src/FirebaseESP8266.h @@ -2368,6 +2368,16 @@ class FirebaseData */ String jsonData(); + + /* + + Return the Firebase JSON object of server returned payload. + + @return FirebaseJson object. + + */ + FirebaseJson &jsonObject(); + /* Return the blob data (uint8_t) array of server returned payload. @@ -2565,6 +2575,7 @@ class FirebaseData std::string _etag = ""; std::string _etag2 = ""; std::string _priority = ""; + FirebaseJson _json; uint16_t _maxBlobSize = 1024; @@ -2614,6 +2625,7 @@ class FirebaseData class StreamData { + public: StreamData(); ~StreamData(); @@ -2625,12 +2637,14 @@ class StreamData bool boolData(); String stringData(); String jsonData(); + FirebaseJson &jsonObject(); String dataType(); String eventType(); void empty(); friend FirebaseESP8266; + FirebaseJson *_json = new FirebaseJson(); -protected: +private: std::string _streamPath = ""; std::string _path = ""; std::string _data = ""; @@ -2638,6 +2652,7 @@ class StreamData std::string _dataTypeStr = ""; std::string _eventTypeStr = ""; uint8_t _dataType = 0; + }; extern FirebaseESP8266 Firebase; diff --git a/src/FirebaseJson.cpp b/src/FirebaseJson.cpp index f9bdb091..f8c7422c 100644 --- a/src/FirebaseJson.cpp +++ b/src/FirebaseJson.cpp @@ -1,5 +1,5 @@ /* - * FirebaseJSON, version 1.0.0 + * FirebaseJSON, version 1.0.1 * * The library for create and pares JSON object. * @@ -35,6 +35,10 @@ FirebaseJson::FirebaseJson(){}; +FirebaseJson::FirebaseJson(std::string &data){ + setJsonData(data); +} + FirebaseJson::~FirebaseJson() { clear(); @@ -43,6 +47,11 @@ FirebaseJson::~FirebaseJson() _parser = nullptr; }; +FirebaseJson &FirebaseJson::setJsonData(std::string &data) +{ + return setJsonData(data.c_str()); +} + FirebaseJson &FirebaseJson::setJsonData(const String &data) { diff --git a/src/FirebaseJson.h b/src/FirebaseJson.h index 3a868c39..00df2705 100644 --- a/src/FirebaseJson.h +++ b/src/FirebaseJson.h @@ -1,6 +1,6 @@ /* - * FirebaseJSON, version 1.0.0 + * FirebaseJSON, version 1.0.1 * * The library for create and pares JSON object. * @@ -94,9 +94,12 @@ class FirebaseJson friend class FirebaseJsonObject; friend class FCMObject; friend class FirebaseESP8266; + friend class FirebaseData; + friend class StreamData; public: FirebaseJson(); + FirebaseJson(std::string &data); ~FirebaseJson(); /* @@ -272,6 +275,7 @@ class FirebaseJson std::unique_ptr _parser = std::unique_ptr(new jsmn_parser()); std::unique_ptr _tokens = nullptr; std::string toStdString(bool isJson = true); + FirebaseJson &setJsonData(std::string &data); FirebaseJson &_add(const char *key, const char *value, size_t klen, size_t vlen, bool isString = true, bool isJson = true); FirebaseJson &addArrayStr(const char *value, size_t len, bool isString); uint32_t getCount(); diff --git a/src/README.md b/src/README.md index 0e54ba62..50d7112a 100644 --- a/src/README.md +++ b/src/README.md @@ -1,7 +1,7 @@ # Firebase Realtime Database Arduino Library for ESP8266 -Google's Firebase Realtime Database Arduino Library for ESP8266 v 2.4.0 +Google's Firebase Realtime Database Arduino Library for ESP8266 v 2.4.1 ## Global functions @@ -162,6 +162,10 @@ Call **[FirebaseData object].stringData** to get string data. Call **[FirebaseData object].jsonData** to get JSON string data. +Call **[FirebaseData object].jsonObject** to get FirebaseJson object. + + + ```C++ bool getShallowData(FirebaseData &dataObj, const String &path); @@ -929,6 +933,9 @@ stores in database. Call [FirebaseData object].jsonData will return the JSON string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + ```C++ bool setJSON(FirebaseData &dataObj, const String &path, const String &jsonString); ``` @@ -957,6 +964,9 @@ stores in database. Call [FirebaseData object].jsonData will return the JSON string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + ```C++ bool setJSON(FirebaseData &dataObj, const String &path, FirebaseJson &json); ``` @@ -1002,12 +1012,16 @@ stores in database. Call [FirebaseData object].jsonData will return the JSON string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + If ETag at the defined database path is not match the provided ETag parameter, the operation will failed with HTTP code 412, Precondition Failed (ETag is not match). If operation failed due to ETag is not match, call [FirebaseData object].ETag() to get the current ETag value. -Also call [FirebaseData object].jsonData to get the current JSON string value. +Also call [FirebaseData object].jsonData to get the current JSON string value [FirebaseData object].jsonObject +to get the FirebaseJson object. ```C++ @@ -1219,6 +1233,9 @@ stores in database. Call [FirebaseData object].jsonData will return the json string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + To reduce the network data usage, use updateNodeSilent instead. ```C++ @@ -1247,6 +1264,9 @@ stores in database. Call [FirebaseData object].jsonData will return the json string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + To reduce the network data usage, use updateNodeSilent instead. ```C++ @@ -1589,8 +1609,13 @@ stores in database. Call [FirebaseData object].jsonData will return the JSON string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + If the payload returned from server is not json type, -the function [FirebaseData object].jsonData will return empty string (String object). +the function [FirebaseData object].jsonData will return empty string (String object), the function +[FirebaseData object].jsonOject will fail to parse the data. + ```C++ bool getJSON(FirebaseData &dataObj, const String &path); @@ -1670,8 +1695,12 @@ stores in database. Call [FirebaseData object].jsonData will return the JSON string value of payload returned from server. +Call [FirebaseData object].jsonObject will return the FirebaseJson object of +payload returned from server. + If the payload returned from server is not json type, -the function [FirebaseData object].jsonData will return empty string (String object). +the function [FirebaseData object].jsonData will return empty string (String object), the function +[FirebaseData object].jsonOject will fail to parse the data. [FirebaseData object].jsonData will return null when the filtered data is empty. @@ -2446,6 +2475,15 @@ String jsonData(); +#### Return the Firebase JSON object of server returned payload. + +return **`FirebaseJson object.`** + +```C++ +FirebaseJson &jsonObject(); +``` + + #### Return the blob data (uint8_t) array of server returned payload