【太極創客esp8266自學筆記】資料交換格式:JOSN

whisperrr發表於2021-09-15

  最近實習,智慧家居相關,需要用esp8266開發。之前沒學習過8266,b站上找到【太極創客esp8266】的相關教程,透過幾天學習,感覺還是比32簡單很多的,上手很快,不需要呼叫很底層的東西。但是呢,自己記性差,怕自己總忘記,就索性計劃看完影片自己總結一下,然後手敲知識點,加深記憶,也便於之後又忘了能回來看看。而且太極創客的教程講的是真滴細【在此感謝太極創客的免費教學影片】

  JSON 之前學習爬蟲的時候就見到過,當時只知道跟txt,什麼的類似,它是一種格式,拿到之後調包提取就完事了,但具體是什麼東西,沒了解過。當時到這塊的時候就雲裡霧裡的,現在學了這塊後算是薄雲見日啦!

  一、JSON是什麼?

  JSON(JavaScript Object Notation) 意為JavaScript物件標記法,雖然名字有JS但不意味著就只是面向JS的,它只是遵循JS的語法,可以內嵌於任何語言。是一種非常常見的資料交換格式。

  相比於XML,少了反人類的標籤,具有良好的可讀性,比較銀杏花(霧。創始人聲稱永不升級,就說明json具有長期的穩定性。

  二、構成

  1.基本元素

  資料以“名”“值”對呈現

  資料“名”和“值”之間由冒號分隔

  大括號{ }用於標註物件內容

  中括號[ ]用於標註陣列內容

  逗號用於分隔資料、物件、陣列

  "資料名":JSON資料值

  "Year":2016

  "URL":"

  冒號:後面的值可以是{ }也可以是[ ]

  物件不能直接包含{物件}與[陣列]

  陣列可以包含{物件}與[陣列]但不能直接存放資料(“資料名”:JOSN資料值)

  (相關示例,源自太極創客官網例子):

  {

  "results": [

  {

  "location": {

  "name": "Beijing",

  "country": "CN"

  },

  "now": {

  "text": "Clear",

  "code": "1",

  "temperature": "3"

  },

  "last_update": "2020-03-01T20:10:00+08:00"

  }

  ]

  }

  三、JSON解析

  Arduino下ArduionJson庫,解析過程:

  1.對單一物件JSON解析:

  /**********************************************************************

  專案名稱/Project : 零基礎入門學用物聯網

  程式名稱/Program name : arduinojosn_1_object

  團隊/Team : 太極創客團隊 / Taichi-Maker ()

  作者/Author : CYNO朔

  日期/Date(YYYYMMDD) : 20200424

  程式目的/Purpose :

  此程式用於演示如何使用arduinojson庫解析以下json資訊。該json包含一個物件,

  物件中有一個資料。

  {

  "name": "taichi-maker",

  "number": 1

  }

  -----------------------------------------------------------------------

  本示例程式為太極創客團隊製作的《零基礎入門學用物聯網》中示例程式。

  該教程為對物聯網開發感興趣的朋友所設計和製作。如需瞭解更多該教程的資訊,請參考以下網頁:

  http:///homepage/esp8266-nodemcu-iot/

  ***********************************************************************/

  #include

  void setup() {

  Serial.begin(9600);

  Serial.println("");

  // 重點1:DynamicJsonDocument物件

  const size_t capacity = JSON_OBJECT_SIZE(2) + 30;

  DynamicJsonDocument doc(capacity);

  // 重點2:即將解析的json檔案

  String json = "{\"name\":\"taichi-maker\",\"number\":1}";

  // 重點3:反序列化資料

  deserializeJson(doc, json);

  // 重點4:獲取解析後的資料資訊

  String nameStr = doc["name"].as();

  int numberInt = doc["number"].as();   大連婦科醫院哪個好  

    // 透過串列埠監視器輸出解析後的資料資訊

  Serial.print("nameStr = ");Serial.println(nameStr);

  Serial.print("numberInt = ");Serial.println(numberInt);

  }

  void loop() {}

  2.對陣列JSON解析

  /**********************************************************************

  專案名稱/Project : 零基礎入門學用物聯網

  程式名稱/Program name : arduinojosn_2_array

  團隊/Team : 太極創客團隊 / Taichi-Maker ()

  作者/Author : CYNO朔

  日期/Date(YYYYMMDD) : 20200424

  程式目的/Purpose :

  此程式用於演示如何使用arduinojson庫解析以下json資訊,該json包含一個陣列,

  陣列有兩個元素,每個元素都是一個物件,每一個物件都有一個資料。

  [

  {

  "name": "taichi-maker"

  },

  {

  "website": ""

  }

  ]

  -----------------------------------------------------------------------

  本示例程式為太極創客團隊製作的《零基礎入門學用物聯網》中示例程式。

  該教程為對物聯網開發感興趣的朋友所設計和製作。如需瞭解更多該教程的資訊,請參考以下網頁:

  http:///homepage/esp8266-nodemcu-iot/

  ***********************************************************************/

  #include

  void setup() {

  Serial.begin(9600);

  // 重點1:DynamicJsonDocument物件

  const size_t capacity = JSON_ARRAY_SIZE(2) + 2*JSON_OBJECT_SIZE(1) + 60;

  DynamicJsonDocument doc(capacity);

  // 重點2:即將解析的json檔案

  String json = "[{\"name\":\"taichi-maker\"},{\"website\":\"\"}]";

  // 重點3:反序列化資料

  deserializeJson(doc, json);

  String nameStr = doc[0]["name"].as();

  String websiteStr = doc[1]["website"].as();

  // 透過串列埠監視器輸出解析後的資料資訊

  Serial.print("nameStr = ");Serial.println(nameStr);

  Serial.print("websiteStr = ");Serial.println(websiteStr);

  }

  void loop() {}

  基本步驟:1.設定動態json物件,並設定空間大小

  其中 JSON_ARRAY_SIZE(n) JSON_OBJECT_SIZE(n)表示 陣列和物件相應的大小 後面加的數字為JSON解析需要提供的額外空間

  而計算計算capacity可以使用ArduinoJson官網的線上工具直接提供

  2.放入要解析的json檔案

  3.解析json資料

  4.解析後的資料放入變數中 ,之後輸出

  doc[0]中的0 代表資料中第0個值

  總結

  基本上ArduionJson庫對json的基礎用法就是這樣,後面也有利用兩個esp8266來互傳json資料的,現在還沒用到,等之後用到了,再回來寫一些總結


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005147/viewspace-2792249/,如需轉載,請註明出處,否則將追究法律責任。

相關文章