划句顾 发表于 2022-2-28 00:32:31

JSON2:搞懂了一些JSON解析

本帖最后由 划句顾 于 2022-2-28 00:32 编辑


总的代码:
/*
*time:2022/2/27
*author:LaoGu
*fuction:关于对JSON的理解
*/
#include<ArduinoJson.h>

void setup() {
Serial.begin(9600);
Serial.println("");

////创建一个DynamicJsonDocument类型的doc对象,大小capacity
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);

//即将解析的json文件
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\"}]}";

//从json解码成的DynamicJsonDocument对象doc
deserializeJson(doc, json);

//从doc对象转换成的JsonObject类型对象obj
JsonObject obj = doc.as<JsonObject>();

//obj里有一个子JsonArray对象 results
JsonArray results= obj["results"];//obj["results"] 是一个数组,results有三个对象:“location,now,last_update”

//串口打印results
Serial.print("results=");
serializeJson(results, Serial);   
Serial.println("");

//打印location
JsonObject location = results["location"];
Serial.print("location=");
serializeJson(location, Serial);   
Serial.println("");

/*
   * /从location中提取一个值
   * 可以有两种形式来转换,结果都是一样的
*/

//形式一:
    const char *name_1 = location["name"];
    Serial.print("location_name_1:"); Serial.println(name_1);

//形式二:
String location_name_2 = location["name"].as<String>();
Serial.print("location_name_2:");Serial.println(location_name_2);

   
}

void loop() {

}


总的运行结果:

static/image/hrline/5.gif
Serial.print("results=");
serializeJson(results, Serial);   
运行结果:


Serial.print("location=");
serializeJson(location, Serial);
运行结果:


static/image/hrline/5.gif
/*
   * /从location中提取一个值
   * 可以有两种形式来转换
*/

//形式一:
    const char *name_1 = location["name"];
    Serial.print("location_name_1:"); Serial.println(name_1);

//形式二:
String location_name_2 = location["name"].as<String>();
Serial.print("location_name_2:");Serial.println(location_name_2);

运行结果:


页: [1]
查看完整版本: JSON2:搞懂了一些JSON解析