划句顾 发表于 2022-2-23 17:46:55

JSON:1.JSON解析和一个代码转换工具

本帖最后由 划句顾 于 2022-2-27 22:19 编辑

一些符号的含义:
:用于分隔数据的“名”和“值”
{}标注对象内容
[]标注数组内容
,分隔数据、对象和数组


static/image/hrline/5.gif

DynamicJsonDocument:动态JSON缓冲区
详细可点击这里




1.单一对象JSON解析
代码如下:
/*
* author:LaoGu
* Time:2022/2/23
* fuction:使用arduinojson库解析以下json信息。该json包含一个对象, 对象中有两个数据。

{
"name": "顾嗷呜",
"number": 419
}

*/

#include <ArduinoJson.h>

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

/*   一些小知识点:
        size_t = unsigned long 无符号长整型
        30 是预计运行的内存空间【注:30是自动生成的,我们不用算。有些代码是自动生成的,可以往后滑,看那个生成代码工具】
      capacity参数的作用是告诉ESP8266我们所建立的DynamicJsonDocument对象将要占用多大的内存空间。
*/
const size_t capacity = JSON_OBJECT_SIZE(2) + 30;
DynamicJsonDocument doc(capacity);

// 即将解析的json文件
String json = "{\"name\":\"顾嗷呜\",\"number\":419}";   

// 反序列化数据解析
deserializeJson(doc, json);

// 获取解析后的数据信息
//as:类型转换-例如将JSON转换为string ,下面就是这样
String nameStr = doc["name"].as<String>();
int numberInt = doc["number"].as<int>();

// 通过串口监视器输出解析后的数据信息
Serial.print("nameStr = ");Serial.println(nameStr);
Serial.print("numberInt = ");Serial.println(numberInt);
}

void loop() {}

static/image/hrline/5.gif

运行结果:





2.JSON数组解析代码如下:
/*
* author:LaoGu
* Time:2022/2/23
* fuction:使用arduinojson库解析以下json信息。该json包含一个数组,数组有两个元素,每个元素都是一个对象,每一个对象都有一个数据。
[
    {
             "name": "顾嗷呜"
    },
    {
             "number": 419
    }
]

注意:数组不能直接存放数据(名值对)。
      数组存放元素是有序的(序号起始值0)
*/

#include <ArduinoJson.h>

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

// DynamicJsonDocument对象
const size_t capacity = JSON_ARRAY_SIZE(2) + 2*JSON_OBJECT_SIZE(1) + 60;
DynamicJsonDocument doc(capacity);

// 即将解析的json文件
String json = "[{\"name\":\"顾嗷呜\"},{\"number\":419}]";

// 反序列化数据
deserializeJson(doc, json);

String nameStr = doc<b></b>["name"].as<String>();
int numberInt = doc<b></b>["number"].as<int>();

// 通过串口监视器输出解析后的数据信息
Serial.print("nameStr = ");Serial.println(nameStr);
   Serial.print("numberInt = ");Serial.println(numberInt);
}

void loop() {}




3.一个快速生成JSON代码的工具:https://arduinojson.org/ 点它
这个是v6【你的arduinoJSON库版本是6的就用这个,如果是5的话就改为v5】

然后按照这样的步骤:



static/image/hrline/5.gif



static/image/hrline/5.gif



static/image/hrline/5.gif



static/image/hrline/5.gif



static/image/hrline/5.gif

就可以啦

static/image/hrline/5.gif

这里是v5,arduinoJSON库版本是5 的这里集合



static/image/hrline/5.gif



static/image/hrline/5.gif



static/image/hrline/5.gif

然后你就可以copy生成的代码到你自己的代码里面

static/image/hrline/5.gif

注意:


static/image/hrline/5.gif





可以看这个视频 的 P15{:10_256:}
https://www.bilibili.com/video/BV1L7411c7jw?p=15

话说,天气真的好冷啊啊啊啊啊,手都冻出血丝了啊啊啊啊{:10_243:}

划句顾 发表于 2022-2-27 22:20:02


String json = "{\"name\":\"顾嗷呜\",\"number\":419}";   
页: [1]
查看完整版本: JSON:1.JSON解析和一个代码转换工具