externe JSON Daten auf dem Wemos weiterverwenden

Servus,
heute plagt mich wieder mal ein Problem, bei dem ich selbst nicht weiter weiß.

Ich möchte aus einer extern zur Verfügung stehenden Quelle (API -> JSON) eine Variable abgreifen und in meinem Sketch weiterverarbeiten.

Hat jemand eine Idee wie man das am einfachsten umsetzen kann?

Gruß
tom1tom11

Hi,

Du kannst entweder eine Library dazu verwenden oder den string manuell auseinander nehmen.
Je nach Komplexität.

Es gibt z.B. innerhalb der AzureIoTUtulity ein einen Json Serializer (serializer.h). Der funktioniert ganz gut, ist aber ein ziemlich großes Teil mit einigem Overhead.

Wenn ich nur ein oder zwei Variablen daraus extrahieren möchte, gehe ich manuell durch den String. So schwierig ist das eigentlich nicht.

Wie bereits geschrieben - je nach komplexität des Aufbaus. Wenn Du es manuell machen willst, würde ich empfehlen Char-Arrays anstelle von String zu benutzen, da es dafür die mächtigeren Funktionen, wie z.B. strtok zum Zerlegen gibt. Grundlegende Infos in Zeichenketten in C.

Gruß Tommy

Ist es möglich die Werte aus der JSON damit auch direkt in einen Array zu schreiben, darin zwischen zu speichern und den Array dann anschließend weiterzuverwenden.
ich möchte die JSON in einem Intervall von 3min abfragen, demnach müsste auch der Array alle 3 min erneuert werden.

Wenn Du Dich mit den angegebenen Vorschlägen und Libs und den darin enthaltenen Beispielen beschäftigst, dann kannst Du das auch realisieren.
Die Beschäftigung damit ist aber Dein Part. Den können wir Dir nicht abnehmen.

Gruß Tommy

tom1tom11:
Ist es möglich die Werte aus der JSON damit auch direkt in einen Array zu schreiben, darin zwischen zu speichern und den Array dann anschließend weiterzuverwenden.

Ja das geht mit der JSON Library.. hin und zurück.

z.B.:

 JsonObject& json = jsonBuffer.parseObject(buf.get());
  if (!json.success()) {
    Serial.println("Failed to parse config file");
    return false;
  }
  const char *string_table[20];
  json["citys"].as<JsonArray>().copyTo(string_table);