简单的解析json数据
/**
* 使用ESP8266配合ArduinoJson库来解析只有一个对象的简单JSON信息
*/
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
Serial.println(" ");
//创建DynamicJsonDocument对象 初始化capacity的初始化容器大小
const size_t capacity=JSON_OBJECT_SIZE(2)+30;
DynamicJsonDocument doc(capacity);
//定义将要解析的json文件
String json="{\"name\":\"Hopeful\",\"age\":\"18\"}";
//反序列化
deserializeJson(doc,json);
//获取解析后的结果
String nameStr=doc["name"].as<String>();
int age=doc["age"].as<int>();
//输出在控制台
Serial.print("nameStr =");Serial.println(nameStr);
Serial.print("age = ");Serial.println(age);
}
void loop() {
// put your main code here, to run repeatedly:
}
使用ArduinoJson库解析一个json数组信息
/**
* 使用ArduinoJson库解析一个json数组信息,该信息如下
*
*
[
{
"name": "taichi-maker"
},
{
"website": "www.taichi-maker.com"
}
]
*/
//导入json解析库
#include<ArduinoJson.h>
void setup() {
Serial.begin(9600);
//定义DynamicJsonDocument对象
const size_t capacity = JSON_ARRAY_SIZE(2) + 2*JSON_OBJECT_SIZE(1) +60;
DynamicJsonDocument doc(capacity);
//定义json文件
String json ="[{\"name\":\"Hopeful\"},{\"website\":\"www.taichi-maker.com\"}]";
//反序列数据
deserializeJson(doc,json);
//解析数据
String nameStr=doc[0]["name"].as<String>();
String websiteStr=doc[1]["website"].as<String>();
// 通过串口监视器输出解析后的数据信息
Serial.print("nameStr = ");Serial.println(nameStr);
Serial.print("websiteStr = ");Serial.println(websiteStr);
}
void loop() {
// put your main code here, to run repeatedly:
}
解释:
创建了capacity 因为对象数组中有两个对象 所以定义json数组的长度为:JSON_ARRAY_SIZE(2)。对象数组中有两个对象
所以使用了:
2*JSON_OBJECT_SIZE(1) 最后的60是给json数组中的其他额外内存空间开销
使用官方解析的工具来生成解析json的代码
官方地址:https://arduinojson.org/v6/assistant/
解析的json数据
{
"results": [
{
"location": {
"name": "Beijing",
"country": "CN"
},
"now": {
"text": "Clear",
"code": "1",
"temperature": "3"
},
"last_update": "2020-03-01T20:10:00+08:00"
}
]
}
最后的结果为:
const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(2) + 2*JSON_OBJECT_SIZE(3) + 130;
DynamicJsonDocument doc(capacity);
const char* json = "{\"results\":[{\"location\":{\"name\":\"Beijing\",\"country\":\"CN\"},\"now\":{\"text\":\"Clear\",\"code\":\"1\",\"temperature\":\"3\"},\"last_update\":\"2020-03-01T20:10:00+08:00\"}]}";
deserializeJson(doc, json);
JsonObject results_0 = doc["results"][0];
const char* results_0_location_name = results_0["location"]["name"]; // "Beijing"
const char* results_0_location_country = results_0["location"]["country"]; // "CN"
JsonObject results_0_now = results_0["now"];
const char* results_0_now_text = results_0_now["text"]; // "Clear"
const char* results_0_now_code = results_0_now["code"]; // "1"
const char* results_0_now_temperature = results_0_now["temperature"]; // "3"
const char* results_0_last_update = results_0["last_update"]; // "2020-03-01T20:10:00+08:00"