【太极创客esp8266自学笔记】数据交换格式:JOSN

  最近实习,智能家居相关,需要用esp8266开发。之前没学习过8266,b站上找到【太极创客esp8266】的相关教程,通过几天学习,感觉还是比32简单很多的,上手很快,不需要调用很底层的东西。但是呢,自己记性差,怕自己总忘记,就索性计划看完视频自己总结一下,然后手敲知识点,加深记忆,也便于之后又忘了能回来看看。而且太极创客的教程讲的是真滴细【在此感谢太极创客的免费教学视频】

  JSON 之前学习爬虫的时候就见到过,当时只知道跟txt,什么的类似,它是一种格式,拿到之后调包提取就完事了,但具体是什么东西,没了解过。当时到这块的时候就云里雾里的,现在学了这块后算是薄云见日啦!

  一、JSON是什么?

  JSON(JavaScript Object Notation) 意为JavaScript对象标记法,虽然名字有JS但不意味着就只是面向JS的,它只是遵循JS的语法,可以内嵌于任何语言。是一种非常常见的数据交换格式。

  相比于XML,少了反人类的标签,具有良好的可读性,比较银杏花(雾。创始人声称永不升级,就说明json具有长期的稳定性。

  二、构成

  1.基本元素

  数据以“名”“值”对呈现

  数据“名”和“值”之间由冒号分隔

  大括号{ }用于标注对象内容

  中括号[ ]用于标注数组内容

  逗号用于分隔数据、对象、数组

  "数据名":JSON数据值

  "Year":2016

  "URL":"www.xxx.com"

  冒号:后面的值可以是{ }也可以是[ ]

  对象不能直接包含{对象}与[数组]

  数组可以包含{对象}与[数组]但不能直接存放数据(“数据名”: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 (www.taichi-maker.com)

  作者/Author : CYNO朔

  日期/Date(YYYYMMDD) : 20200424

  程序目的/Purpose :

  此程序用于演示如何使用arduinojson库解析以下json信息。该json包含一个对象,

  对象中有一个数据。

  {

  "name": "taichi-maker",

  "number": 1

  }

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

  本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。

  该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页:

  http://www.taichi-maker.com/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();   大连妇科医院哪个好  http://www.83692222.cn/

    // 通过串口监视器输出解析后的数据信息

  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 (www.taichi-maker.com)

  作者/Author : CYNO朔

  日期/Date(YYYYMMDD) : 20200424

  程序目的/Purpose :

  此程序用于演示如何使用arduinojson库解析以下json信息,该json包含一个数组,

  数组有两个元素,每个元素都是一个对象,每一个对象都有一个数据。

  [

  {

  "name": "taichi-maker"

  },

  {

  "website": "www.taichi-maker.com"

  }

  ]

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

  本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。

  该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页:

  http://www.taichi-maker.com/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\":\"www.taichi-maker.com\"}]";

  // 重点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数据的,现在还没用到,等之后用到了,再回来写一些总结


请使用浏览器的分享功能分享到微信等