tak na przyszłość i dla potomnych jest coś takiego jak ArduinoJson Assistant
https://arduinojson.org/v6/assistant/
druga sprawa, że tak wygenerowany kod nie zawsze jest dobry. Podany przez Ciebie json to typowy słownik gdzie kluczami są 1001 itp. Jeżeli pojawi się kolejny klucz i zastosujesz to podejście prawdopodobnie zrobisz kopiuj-wklej i powielisz kod. Jest to bardzo zła praktyka w programowaniu ale nie będę się o tym rozpisywać
przykład jak można wyeliminować ten problem
Code: Select all
#include <Arduino.h>
#include <ArduinoJson.h>
typedef struct {
bool connected;
bool isCalibrating;
int shut;
} Data;
void setup() {
Serial.begin(9600);
Serial.println();
const size_t capacity = 4 * JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(4) + 160;
DynamicJsonDocument doc(capacity);
const char* json = "{\"1001\":{\"connected\":true,\"is_calibrating\":false,\"shut\":20},\"1002\":{\"connected\":true,\"is_calibrating\":false,\"shut\":30},\"1003\":{\"connected\":true,\"is_calibrating\":false,\"shut\":50},\"1004\":{\"connected\":true,\"is_calibrating\":false,\"shut\":100}}";
deserializeJson(doc, json);
JsonObject jsonObject = doc.as<JsonObject>();
Serial.println(jsonObject.size());
Data data[jsonObject.size()];
int index = 0;
for (JsonPair pair : jsonObject) {
data[index].connected = pair.value()["connected"];
data[index].isCalibrating = pair.value()["is_calibrating"];
data[index].shut = pair.value()["shut"];
index++;
}
for (Data d : data) {
Serial.print("connected - ");
Serial.print(d.connected);
Serial.print(" isCalibrating - ");
Serial.print(d.isCalibrating);
Serial.print(" shut - ");
Serial.println(d.shut);
}
}
void loop() {
}