ioBroker JavaScript – JSON verarbeiten

In diesem Artikel zeige ich Dir, wie Du in einem JavaScript ein JSON-String verarbeiten kannst.

Für ein aktuelles Smart-Home Projekt musste ich in einem JavaScript ein JSON-String (JavaScript Object Notation) parsen und die einzelnen Werte weiterverarbeiten. Über ein lokales LoRa-Netzwerk lasse ich mir von entfernten Sensoren Temperatur- und Luftfeuchtigkeitswerte in ioBroker übertragen. Die Sensorinformationen werden dazu per JSON-Zeichenkette über MQTT an ioBroker übermittelt. Die JSON-Zeichenkette hat folgendes Format:

{"name":"SensorOutdoor1", "temp":4.5, "hum":58}

Mit der JSON-Zeichenfolge wird der Name des Sensors, die Temperatur sowie die Luftfeuchtigkeit übermittelt. Für die weitere Verarbeitung und spätere Anzeige in der ioBroker Visualisierung muss die JSON-Zeichenfolge jetzt entsprechend geparsed werden. Hierfür gibt es bereits eine Standard-Funktionalität in JavaScript.

Über die JSON.parse() Methode wird aus der übergebenen JSON-Zeichenkette ein JavaScript Objekt erzeugt. Über den Punkt-Operator können wir dann auf die einzelnen Eigenschaften des JavaScript-Objekts zugreifen. Die Eigenschaften sind hier identisch mit den Namen aus der JSON-Zeichenkette. Im folgenden Code wird aus der oberen JSON-Zeichenkette ein JavaScript-Objekt generiert.

try { 
    obj = JSON.parse(value);
    var name = obj.name;
    var temp = obj.temp;
    var hum = obj.hum;
  } catch (e) {
    return;
  }

Wichtig ist hierbei der Try-Catch Block, der im Fehlerfall den Fehler abfängt und eine entsprechende Fehlerbehandlung durchführt. Fehler können z.B. dann auftreten, wenn die JSON-Zeichenkette nicht valide (Sonderzeichen, Übertragungsfehler, fehlerhafte Messwerte NaN, …) ist und somit kein JavaScript Objekt generiert werden kann. In unserem Fall wird einfach die JavaScript-Funktion verlassen und kein weiterer Code ausgeführt.

Ich hoffe ich konnte Dir mit diesem Artikel zeigen, wie einfach Du in JavaScript JSON-Strings verarbeiten kannst. Über Kommentare, Fragen oder Anregungen freue ich mich.

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

3 Gedanken zu „ioBroker JavaScript – JSON verarbeiten

  • 24. Juli 2021 um 10:43
    Permalink

    Halo Matthias,

    könntest du mir einmal erläutern wie ich aus einem String bestimmte Werte in eine Variable schreiben kann. Hab jetzt schon Stunden bei Google verbracht aber leider nix brauchbares gefunden.

    Das ist ein Teil meines String:
    {„status“:“OK“,“data“:{„statistics“:[{„time“:1626622200,“reportedHashrate“:30163328,“currentHashrate“:38178069.626666665,“validShares“:32,“invalidShares“:0,“staleShares“:0,“activeWorkers“:1}

    Ich hole die Daten per Parser von einer Website ab.

    Gruß
    Stefan

    Antwort
  • 12. Dezember 2021 um 13:45
    Permalink

    @Matthias: bitte meinen 1. Post löschen oder erst gar nicht freigeben….

    Hallo Stefan,
    ist jetzt zwar schon ein Weilchen her…aber vielleicht nutzt es Dir ja noch etwas…
    Also.. zunächst einmal mußt Du den erhaltenen Json String abändern. Die vorhandenen Hochkommata akzeptiert das Javascript so nicht. z.B. muss aus
    „status“:“OK“ —-> „status“ : „OK“
    Da Du nur einen Teil Deines Strings gepostet hast, habe ich den mal am Ende ergänzt mit „]}}“ , damit zumindest ein Datensatz korrekt vorliegt. Das sähe dann so aus:

    var myTest2 =`{
    „status“:“OK“,
    „data“ :{
    „statistics“:[
    {
    „time“:1626622200,
    „reportedHashrate“:30163328,
    „currentHashrate“:38178069.626666665,
    „validShares“:32,
    „invalidShares“:0,
    „staleShares“:0,
    „activeWorkers“:1
    }
    ]
    }
    }`;

    Jetzt noch aus dem Json String ein Objekt machen:
    var myObj = JSON.parse(myTest);

    Jetzt kannst Du mit der bekannten Objelt-Notation auf alle Werte Deines Objekts zugreifen….z.B.

    var myStatus = myObj.status
    var myTime = myObj.data.statistics[0].time

    Wahrscheinlich liegen bei Dir mehrere Statistik Daten in diesem Array vor….dann z.B.
    var myTime = myObj.data.statistics[1].time
    usw….

    hth
    Ralph

    Antwort
  • 21. April 2022 um 20:17
    Permalink

    Hallo,

    ich grüble auch schon mehrere Stunden an einem ähnlichen Problem.
    Ich bekomme Daten eine Smartzählers per Mqtt – ich schaffe es nicht, daraus einen brauchbaren Datensatz zu machen.
    Kannst du mir da helfen?

    {„1.8.0″:24247114,“2.8.0″:0,“3.8.1″:376098,“4.8.1″:7797025,“1.7.0″:367,“2.7.0″:0,“3.7.0″:0,“4.7.0″:195,“1.128.0“:0}

    Das kommt bei mir an . Die Werte nach den Doppelpunkten sind die verschiedenen Verbrauchswerte die ich gerne einzeln visualisiert hätte.
    Irgendwie bin ich auf Kriegsfuss mit Datenbanken und Java 🙂

    Danke BG Christoph

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.