醬是創客的ESP32教學主題第九篇,以Ai-Thinker安信可NodeMCU-32S(使用Arduino語言)來實作教學,本篇教學將著重使用ArduinoJson套件讓字串與JSON文字檔互相轉換,ArduinoJson的JSON轉換效率高,可以做到Serialize和Deserialize,一般我們不建議JSON檔案裡面塞太多東西,通常都會塞User ID、指令、傳送訊息等簡單的資料,通常我們會把它控制在100bytes,畢竟Arduino開發板的RAM沒有很大,JSON傳太多Azure和GCP的費用也很高。
以下是我們今天的目標
- 安裝使用ArduinoJson.h
- Serialize JSON是將字串轉JSON格式
- Deserialize JSON是將JSON轉字串格式
- StaticJsonDocument<200> 的200是200bytes放memory區,所以不能宣告太大,不然會overflow,也因為有StaticJsonDocument所以大量讀取JSON也不會很慢
- DeserializationError json_error的json_error是來判斷反解的JSON是否正常,正常後才能解出資料
如何安裝ArduinoJson套件? 至”工具”>>”管理程式庫”,搜尋ArduinoJson,作者為Benoit Blanchon,並安裝它。
Arduino 範例程式碼如下
//醬是創客 開發實作的好夥伴 #include "WiFi.h" #include <ArduinoJson.h> StaticJsonDocument<200> json_doc; char json_output[100]; DeserializationError json_error; const char* payload_room; const char* payload_msg; void setup() { Serial.begin(115200); //字串轉JSON json_doc["room"] = "chosemaker"; json_doc["msg"] = "www.chosemaker.com"; serializeJson(json_doc, json_output); Serial.println( "string to json:" ); Serial.println( json_output ); //JSON轉字串 json_error = deserializeJson(json_doc, json_output); if (!json_error) { payload_room = json_doc["room"]; payload_msg = json_doc["msg"]; Serial.println( "json to string:" ); Serial.println( "payload_room:" ); Serial.println(payload_room); Serial.println( "payload_msg:" ); Serial.println(payload_msg); } } void loop() { }
Arduino 序列埠監控視窗 輸出如下
string to json: {"room":"chosemaker","msg":"www.chosemaker.com"} json to string: payload_room: chosemaker payload_msg: www.chosemaker.com