最近实习,智能家居相关,需要用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数据的,现在还没用到,等之后用到了,再回来写一些总结