Arduino JSON 6 - problem z dekodowaniem

hZkgZK
Posts: 52
Joined: Fri Aug 30, 2019 10:06 am

Post

wiem że problem rozwiązany ale dorzucę swoje 5 groszy
tak na przyszłość i dla potomnych jest coś takiego jak ArduinoJson Assistant ;) wystarczy wkleić json i mamy wygenerowany gotowy kod
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() {
}

Return to “Pomoc”