ArduinoJson

ArduinoJson 7 endringer

https://arduinojson.org/v7/how-to/upgrade-from-v6/
I ArduinoJson 7 har en del funksjoner blitt fjernet/erstattet med andre funksjoner. Under er en oversikt:

Funksjoner som er fjernet i V7 Erstatning i V7
StaticJsonDocument JsonDocument
DynamicJsonDocument JsonDocument
JsonDocument::capacity() JsonDocument::overflowed()
createNestedArray() add<JsonArray>() / to<JsonArray>()
createNestedObject() add<JsonObject>() / to<JsonObject>()
containsKey() is<T>()
memoryUsage() -
garbageCollect() -

Eksempler

Enkelt eksempel med et dokument uten sub-objekter

#include <ArduinoJson.h>

// Sett en stor nok størrelse til å lagre all JSON-data + litt sikkerhetsmargin
char jsonSystemString[512];

// JSON-dokumentet
JsonDocument JSONdocSystem;

void updateJSON() {

    // Tøm hele dokumentet
    JSONdocSystem.clear();

    // Sett inn noen verdier
    JSONdocSystem["heap_free_bytes"] = esp_get_free_heap_size();
    JSONdocSystem["rssi"] = WiFi.RSSI(); 

    // Sjekk for overflow
    size_t jsonSize = measureJson(JSONdocSystem);
    if(jsonSize > sizeof(jsonSystemString)) {
        strncpy(jsonSystemString, "{\"error\":\"Overflow!\"}", sizeof(jsonSystemString));
    } else {
        // Konverter JSON-dokumentet til en char-array (jsonSystemString)
        serializeJson(JSONdocSystem, jsonSystemString);
    }

    // Print JSON til Serial Monitor
    Serial.println(jsonSystemString);
    // Eller send som en webserver respons
    server.send(200, "application/json", jsonSystemString);

}

Eksempel på dokument med sub-objekter og sub-arrays

#include <ArduinoJson.h>

// Sett en stor nok størrelse til å lagre all JSON-data + litt sikkerhetsmargin
char jsonLogsString[3072];

// JSON-dokumentet
JsonDocument JSONdocLogs;

void getLogsAsWebResponse() {

  // Tøm hele dokumentet
  JSONdocLogs.clear();

  // Legg til 5 JSON-objekter i JSON-dokumentet med tilfeldig data
  for(size_t i = 0; i < 5; i++) {

    // Nytt JSON-objekt
    JsonObject logObj = JSONdocLogs.add<JsonObject>();

    // Sett inn noen verdier
    logObj["index"] = i;
    logObj["datetime"] = millis();
    logObj["message"] = "Hallo!";

    // Kan også lage sub-ojekt i andre objekter:
    JsonObject subLogObj = JSONdocLogs["subObj"].to<JsonObject>();
    subLogObj["index"] = "en verdi";

    // Eller array i andre objekter:
    JsonArray subLogArr = JSONdocLogs["subArr"].to<JsonArray>();
    subLogArr.add("en verdi");

  }

  // Sjekk for overflow
  size_t jsonSize = measureJson(JSONdocLogs);
  if(jsonSize > sizeof(jsonLogsString)) {
    strncpy(jsonLogsString, "{\"error\":\"Overflow\"}", sizeof(jsonLogsString));
  } else {
    // Konverter JSON-dokumentet til en char-array (jsonLogsString)
    serializeJson(JSONdocLogs, jsonLogsString);
  }

  // Send respons til webserver
  server.send(200, "application/json", jsonLogsString);

}