如何在 ESP8266 上使用 ArduinoJson 创建嵌套 Json
How to Create Nested Json Using ArduinoJson on ESP8266
我想要这个输出 Json 来自 Esp8266
我正在尝试使用另一个 json 库 https://github.com/arduino-libraries/Arduino_JSON
这是比 arduinojson.org
轻量级的库
{
"ID": "0785E7",
"DEVICE": "SINGLE_RELAY",
"Public_Name": "Demo Switch",
"version": 1,
"payloadVersion": 1,
"SW": 1,
"HW": 1,
"CHIPSIZE": 1048576,
"CHIPSPEED": 40000000,
"CHIPMODE": 3,
"capabilities": [
{
"interface": "Demo.Switch",
"type": "ONOFF",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "on",
"MQTT_SWITCH_SYNC": "sync"
},
{
"interface": "Demo.Countdown",
"type": "Countdown",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "s",
"MQTT_SWITCH_SYNC": "x"
},
{
"interface": "Demo.Schedule",
"type": "Schedule",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "s",
"MQTT_SWITCH_SYNC": "x"
}
]
}
Arduino 函数
String Device_info()
{
JSONVar json;
json["ID"] = ESPID;
json["DEVICE"] = DEVICE_TYPE;
json["Public_Name"] = DEVICE_CHANNEL;
json["version"] = relaystatus1;
json["payloadVersion"] = RelayPIN;
json["SW"] = userid;
json["HW"] = Trigger;
json["CHIPSIZE"] = rssi_str;
json["CHIPSPEED"] = "1";;
String jsonString = JSON.stringify(json);
}
我想在上面添加 "capabilities" objectArray json。
createNestedObject() 方法可用于在嵌套数组中创建 capabilities
个对象。
ArduinoJson Assistant建议如下代码:
const size_t capacity =
JSON_ARRAY_SIZE(3) + 3*JSON_OBJECT_SIZE(7) + JSON_OBJECT_SIZE(11);
DynamicJsonDocument doc(capacity);
doc["ID"] = "0785E7";
doc["DEVICE"] = "SINGLE_RELAY";
doc["Public_Name"] = "Demo Switch";
doc["version"] = 1;
doc["payloadVersion"] = 1;
doc["SW"] = 1;
doc["HW"] = 1;
doc["CHIPSIZE"] = 1048576;
doc["CHIPSPEED"] = 40000000;
doc["CHIPMODE"] = 3;
JsonArray capabilities = doc.createNestedArray("capabilities");
JsonObject capabilities_0 = capabilities.createNestedObject();
capabilities_0["interface"] = "Demo.Switch";
capabilities_0["type"] = "ONOFF";
capabilities_0["version"] = "1.0";
capabilities_0["sync"] = true;
capabilities_0["control_pin"] = 2;
capabilities_0["MQTT_SWITCH_TOPIC"] = "on";
capabilities_0["MQTT_SWITCH_SYNC"] = "sync";
JsonObject capabilities_1 = capabilities.createNestedObject();
capabilities_1["interface"] = "Demo.Countdown";
capabilities_1["type"] = "Countdown";
capabilities_1["version"] = "1.0";
capabilities_1["sync"] = true;
capabilities_1["control_pin"] = 2;
capabilities_1["MQTT_SWITCH_TOPIC"] = "s";
capabilities_1["MQTT_SWITCH_SYNC"] = "x";
JsonObject capabilities_2 = capabilities.createNestedObject();
capabilities_2["interface"] = "Demo.Schedule";
capabilities_2["type"] = "Schedule";
capabilities_2["version"] = "1.0";
capabilities_2["sync"] = true;
capabilities_2["control_pin"] = 2;
capabilities_2["MQTT_SWITCH_TOPIC"] = "s";
capabilities_2["MQTT_SWITCH_SYNC"] = "x";
serializeJson(doc, Serial);
JSONVar supported;
JSONVar Countdown;
Countdown["interface"] = interface_countdown;
Countdown["type"] = interface_countdown_type;
Countdown["version"] = version_1;
Countdown["retrievable"] = true;
Countdown["MIN_COUNT"] = 1;
Countdown["MAX_COUNT"] = COUNTDOWNCOUNT;
Countdown["control_pin"] = RELAY_PIN;
Countdown["MQTT_TOPIC"] = MQTT_COUNTDOWN_IN;
Countdown["MQTT_SYNC"] = MQTT_COUNTDOWN_IN;
JSONVar schedule;
schedule["interface"] = interface_Schedule;
schedule["type"] = interface_Schedule_type;
schedule["version"] = version_1;
schedule["retrievable"] = true;
schedule["control_pin"] = RELAY_PIN;
schedule["MIN_COUNT"] = 1;
schedule["MAX_COUNT"] = SCHEDUECOUNT;
schedule["MQTT_TOPIC"] = MQTT_TIMMER_IN;
schedule["MQTT_SYNC"] = MQTT_TIMMER_IN;
supported[0] = Countdown;
supported[1] = schedule;
JSONVar power_control;
power_control["interface"] = interface_power;
power_control["type"] = interface_power_type;
power_control["version"] = version_1;
power_control["retrievable"] = true;
power_control["proactivelyReported"] = true;
power_control["control_pin"] = RELAY_PIN;
power_control["MQTT_SWITCH_TOPIC"] = MQTT_SWITCH_COMMAND_TOPIC1;
power_control["MQTT_SWITCH_SYNC"] = MQTT_SWITCH_PUBLISH_TOPIC1;
power_control["supported"] = supported;
JSONVar capabilities;
capabilities[0] = power_control;
delay(200);
JSONVar json;
json["ID"] = ESPID;
json["DEVICE"] = DEVICE_TYPE;
json["MACADDRESS"] = String(WiFi.macAddress());
json["Public_Name"] = DEVICE_CHANNEL;
json["version"] = version_1;
json["payloadVersion"] = payloadVersion;
json["SW"] = SW;
json["HW"] = HW;
json["CHIPSIZE"] = (int)ESP.getFlashChipRealSize();
json["CHIPSPEED"] = (int)ESP.getFlashChipSpeed();
json["capabilities"] = capabilities;
delay(200);
String jsonString = JSON.stringify(json);
Serial.println(jsonString);
我想要这个输出 Json 来自 Esp8266
我正在尝试使用另一个 json 库 https://github.com/arduino-libraries/Arduino_JSON 这是比 arduinojson.org
轻量级的库{
"ID": "0785E7",
"DEVICE": "SINGLE_RELAY",
"Public_Name": "Demo Switch",
"version": 1,
"payloadVersion": 1,
"SW": 1,
"HW": 1,
"CHIPSIZE": 1048576,
"CHIPSPEED": 40000000,
"CHIPMODE": 3,
"capabilities": [
{
"interface": "Demo.Switch",
"type": "ONOFF",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "on",
"MQTT_SWITCH_SYNC": "sync"
},
{
"interface": "Demo.Countdown",
"type": "Countdown",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "s",
"MQTT_SWITCH_SYNC": "x"
},
{
"interface": "Demo.Schedule",
"type": "Schedule",
"version": "1.0",
"sync": true,
"control_pin": 2,
"MQTT_SWITCH_TOPIC": "s",
"MQTT_SWITCH_SYNC": "x"
}
]
}
Arduino 函数
String Device_info()
{
JSONVar json;
json["ID"] = ESPID;
json["DEVICE"] = DEVICE_TYPE;
json["Public_Name"] = DEVICE_CHANNEL;
json["version"] = relaystatus1;
json["payloadVersion"] = RelayPIN;
json["SW"] = userid;
json["HW"] = Trigger;
json["CHIPSIZE"] = rssi_str;
json["CHIPSPEED"] = "1";;
String jsonString = JSON.stringify(json);
}
我想在上面添加 "capabilities" objectArray json。
createNestedObject() 方法可用于在嵌套数组中创建 capabilities
个对象。
ArduinoJson Assistant建议如下代码:
const size_t capacity =
JSON_ARRAY_SIZE(3) + 3*JSON_OBJECT_SIZE(7) + JSON_OBJECT_SIZE(11);
DynamicJsonDocument doc(capacity);
doc["ID"] = "0785E7";
doc["DEVICE"] = "SINGLE_RELAY";
doc["Public_Name"] = "Demo Switch";
doc["version"] = 1;
doc["payloadVersion"] = 1;
doc["SW"] = 1;
doc["HW"] = 1;
doc["CHIPSIZE"] = 1048576;
doc["CHIPSPEED"] = 40000000;
doc["CHIPMODE"] = 3;
JsonArray capabilities = doc.createNestedArray("capabilities");
JsonObject capabilities_0 = capabilities.createNestedObject();
capabilities_0["interface"] = "Demo.Switch";
capabilities_0["type"] = "ONOFF";
capabilities_0["version"] = "1.0";
capabilities_0["sync"] = true;
capabilities_0["control_pin"] = 2;
capabilities_0["MQTT_SWITCH_TOPIC"] = "on";
capabilities_0["MQTT_SWITCH_SYNC"] = "sync";
JsonObject capabilities_1 = capabilities.createNestedObject();
capabilities_1["interface"] = "Demo.Countdown";
capabilities_1["type"] = "Countdown";
capabilities_1["version"] = "1.0";
capabilities_1["sync"] = true;
capabilities_1["control_pin"] = 2;
capabilities_1["MQTT_SWITCH_TOPIC"] = "s";
capabilities_1["MQTT_SWITCH_SYNC"] = "x";
JsonObject capabilities_2 = capabilities.createNestedObject();
capabilities_2["interface"] = "Demo.Schedule";
capabilities_2["type"] = "Schedule";
capabilities_2["version"] = "1.0";
capabilities_2["sync"] = true;
capabilities_2["control_pin"] = 2;
capabilities_2["MQTT_SWITCH_TOPIC"] = "s";
capabilities_2["MQTT_SWITCH_SYNC"] = "x";
serializeJson(doc, Serial);
JSONVar supported;
JSONVar Countdown;
Countdown["interface"] = interface_countdown;
Countdown["type"] = interface_countdown_type;
Countdown["version"] = version_1;
Countdown["retrievable"] = true;
Countdown["MIN_COUNT"] = 1;
Countdown["MAX_COUNT"] = COUNTDOWNCOUNT;
Countdown["control_pin"] = RELAY_PIN;
Countdown["MQTT_TOPIC"] = MQTT_COUNTDOWN_IN;
Countdown["MQTT_SYNC"] = MQTT_COUNTDOWN_IN;
JSONVar schedule;
schedule["interface"] = interface_Schedule;
schedule["type"] = interface_Schedule_type;
schedule["version"] = version_1;
schedule["retrievable"] = true;
schedule["control_pin"] = RELAY_PIN;
schedule["MIN_COUNT"] = 1;
schedule["MAX_COUNT"] = SCHEDUECOUNT;
schedule["MQTT_TOPIC"] = MQTT_TIMMER_IN;
schedule["MQTT_SYNC"] = MQTT_TIMMER_IN;
supported[0] = Countdown;
supported[1] = schedule;
JSONVar power_control;
power_control["interface"] = interface_power;
power_control["type"] = interface_power_type;
power_control["version"] = version_1;
power_control["retrievable"] = true;
power_control["proactivelyReported"] = true;
power_control["control_pin"] = RELAY_PIN;
power_control["MQTT_SWITCH_TOPIC"] = MQTT_SWITCH_COMMAND_TOPIC1;
power_control["MQTT_SWITCH_SYNC"] = MQTT_SWITCH_PUBLISH_TOPIC1;
power_control["supported"] = supported;
JSONVar capabilities;
capabilities[0] = power_control;
delay(200);
JSONVar json;
json["ID"] = ESPID;
json["DEVICE"] = DEVICE_TYPE;
json["MACADDRESS"] = String(WiFi.macAddress());
json["Public_Name"] = DEVICE_CHANNEL;
json["version"] = version_1;
json["payloadVersion"] = payloadVersion;
json["SW"] = SW;
json["HW"] = HW;
json["CHIPSIZE"] = (int)ESP.getFlashChipRealSize();
json["CHIPSPEED"] = (int)ESP.getFlashChipSpeed();
json["capabilities"] = capabilities;
delay(200);
String jsonString = JSON.stringify(json);
Serial.println(jsonString);