Moin, anbei mal er formatierte Text einer JSON Abfrage meines AccuWeather Accounts. Grundsätzlich ist mit JSON mit Arduino klar, bloss nicht wie ich an die Objekte komme? D.h. welche Befehle brauche ich nach dem Decodieren? Beispiel aus dem Text: "Temperature":{ "Minimum":{ "Value":5.8, "Unit":"C", "UnitType":17 ich will an die Temperatur Einheit, also "C". Wie komme ich da dran? Es gibt so Dinge wie root["main"]["temp"]) aber wie ist die Struktur dieser Klammer-Geschichten? JSON Datensätze können beliebige Tiefen haben? Könnte das mal jemand verständlich erklären? Was hat es mit dem root auf sich? Muss man da eine "Wurzel" setzen? Binäre Bäume kenne ich ja, ein JSON Datensatz ist nichts anderes. Grüße, Christian
Christian J. schrieb: > welche Befehle brauche ich nach dem Decodieren? Was willst Du denn dekodieren? Der Text ist doch nicht verschlüsselt. mfg Klaus
Christian J. schrieb: > Grundsätzlich ist mit JSON mit Arduino klar, bloss nicht wie ich an die > Objekte komme? Also nicht. Hast du mals "arduino json" gesucht: e.g. https://github.com/bblanchon/ArduinoJson leo
Wenn wir von Arduino reden, dann denke ich in erster Linie an einen
ATmega328, nicht an einen Mikrocontroller mit zig kB Programmspeicher
und RAM.
Insofern habe ich doch ernsthafte Bedenken gegen einen vollwertigen JSON
Parser.
Man kann auch einfach dein Input Zeilenweise lesen und nach
> "Unit":"
Der String dahinter bis zu den nächsten Anführungsstrichen ist dann der
Value. Ja ich weiß, damit kann man noch lange nicht jedes beliebige JSON
Format einlesen, aber das verlangt auch niemand, oder?
Stefan ⛄ F. schrieb: > Insofern habe ich doch ernsthafte Bedenken gegen einen vollwertigen JSON > Parser. Der kann aber problemlos laufen auf einer 32 Bit CPU. Wenn dann richtig! Klappt ja auch, nur habe ich das abgeschrieben, ohne es wirklich zu verstehen.
leo schrieb: > Also nicht. > > Hast du mals "arduino json" gesucht: > e.g. https://github.com/bblanchon/ArduinoJson Ich möchte nur wissen, wie sich die Hierarchie einer JSON Struktur in den ganzen Klammerebenen abbildet? Ich habe schon viel gelesen, ohne es zu kapieren! Eine ganze einfache Kiste ist das hier, bloss eine Ebene. Aber vieles hat erheblich mehr Ebenen! const char* sensor = doc["sensor"]; long time = doc["time"]; double latitude = doc["data"][0]; double longitude = doc["data"][1]; es gibt nämlich noch so Sachen wie doc["sensor"][3]["sensor_n] usw. Bloss wie weiss man das? Gibt der Parser eine Struktur aus? Der parst ja beliebige Inhalte und legt sie "irgendwie" ab und erst danach kann man sie auslesen. Nur muss man ja irgendwie rauskriegen, wie man das macht.
Christian J. schrieb: > Bloss wie weiss man das? Dumpen oder einfach zaehlen. https://www.geeksforgeeks.org/json-dump-in-python/ leo
Komme ich nicht mit klar so... doc: the JsonDocument that will store the memory representation of the MessagePack document. Nett geschrieben.... aber da steht nirgendwo WIE das abgelegt wird! Klar, irgendeine Baumstruktur wird das sein... aber ich will deren Geometrie wissen bevor ich irgendwas auslese und dann wie ich an ein Element rankomme, was tief drin ist. Wenn alles nicht hilft probiere ich es einfach aus, Trial&Error, Comoilerfehler oder das Richtige steht irgendwann drin. Nur ist das leider die Methode wie ich mein erstes Projekt gemacht habe. Irgendwas kopiert, verändert, herum gedoktort und dann lief es. Nur warum es das tut verstehe ich nicht wirklich.
Es gibt in ArduinoJson eine Funktion deserializeJson(jsnstrg, msgString) Die erste Variable wird im Header definiert als Json-Objekt: StaticJsonDocument<200> jsnstrg; In der zweiten (msgString) liegt der Payload vom mqtt. Mit deserializeJson(jsnstrg, msgString) werden der json zerlegt und kann dann über: temp1 = jsnstrg["sensor"]; gezogen werden. In den Beispielen von ArduinoJson sind auch einige dabei für etwas verschachteltere Objekte.
Lies dir das durch: https://arduinojson.org/v6/doc/ Ist leider auf der Startseite erst nach gefühlten 100 anderen Boxen mit Eigenwerbung zu finden. Und ja, JSON kann soweit ich weiß beliebig tief verschachtelt sein. Und ohne zu wissen, wie die Daten in dem JSON eingetragen werden, wirst du auch keine Chance haben, sie wieder heraus zu bekommen. MfG, Arno
Christian J. schrieb: > Der kann aber problemlos laufen auf einer 32 Bit CPU. Wieviel Bit Verarbeitungsbreite die CPU hat, spielt für die Aufgabe, einen JSON-Parser zu konstruieren, absolut keine Rolle, da die allermeisten Operationen sowieso nur mit 8 Bit Breite erfolgen. Das einzige, was wirklich wichtig ist, ist die Menge an verfügbarem RAM, denn allein diese begrenzt die mögliche Komplexität des JSON. Der Algorithmus ist übrigens ziemlich trivial, JSON wurde ja schließlich extra dafür konstruiert, sich möglichst einfach parsen zu lassen. Sonst hätte man ja auch gleich bei XML bleiben können...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.