使用ESP8266配合ArduinoJson库来解析JSON信息

本文介绍如何使用ArduinoJson库解析不同类型的JSON数据,包括单一对象、数组及复杂结构,并提供实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的解析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"  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值