Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. JSON parsing (verschachtelt)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    303

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    600

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

JSON parsing (verschachtelt)

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
11 Beiträge 5 Kommentatoren 1.1k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    leif1
    schrieb am zuletzt editiert von
    #1

    Nabend,
    ich konnt mein Problem zwar inzwischen über NodeRed lösen, aber irgendwie lässt es mir doch keine Ruhe dass ich es nicht über JavaScript hinbekam. Schließlich möchte man ja auch etwas lernen :)

    Ich habe einen MHZ19B Co2 Sensor, welcher seine Daten zum MQTT Broker liefert (Sonoff Adapter nutze ich in diesem Fall bewusst nicht).

    Id:

    mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR
    

    Wert:

    {"Time":"2019-11-28T16:45:07","MHZ19B":{"Model":"B","CarbonDioxide":786,"Temperature":23.0},"TempUnit":"C"}
    

    Ich möchte nun lediglich den Wert von CarbonDioxide in eine neue Variable schreiben. Mein Problem ist dass ich nicht verstanden habe wie ich quasi auf die Unterebene "MHZ19B" gelange.

    Auf Grund der anderen Beiträge hatte ich es mit

    var pfad = "javascript.0.jsonconverter.";
    var channel = "wohnzimmer.";
    var sname = "co2.";
     
     
    var idco2 = pfad + channel + sname + 'co2';
    
     
    // Create States
     
    createState(idco2, 0,{type: 'number',name: 'CarbonDioxid', read: true,write: true,role: 'value'});
     
    // script beginning
    on({id: 'mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR', change: "any"}, function (obj) {
     
       //variabele erstellen fuer meine 3 beispiel objecte
            var co2;
    
     
       try {obj = JSON.parse(getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
       } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
               return;
        }
     
       co2 = obj.CarbonDioxide;
     
        setState(idco2, co2);
     
       log(co2);
    
    });
    

    probiert, aber das schlug fehl. And Dinge wie TempUnit kam ich zwar beim Testen heran, aber nicht an die innerhalb von "MHZ19B": {}
    was ja ein Array zu sein scheint?

    Ich habe dann eher im Nebel gestochert und Dinge wie

    co2 = obj.MHZ19B.CarbonDioxide;

    ausprobiert, aber das war wohl der falsche Ansatz.

    1 Antwort Letzte Antwort
    0
    • J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.
      Developer
      schrieb am zuletzt editiert von J.A.R.V.I.S.
      #2

      @leif1 dein letztes Beispiel ist richtig. Probier mal nachstehendes.

      let values;
      try {
         values = JSON.parse(getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
      } catch (e) {
         console.error('Cannot parse: ' + getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
         return;
      }
      let co2 = values.MHZ19B.CarbonDioxide;
      

      J.A.R.V.I.S.

      1 Antwort Letzte Antwort
      1
      • L Offline
        L Offline
        leif1
        schrieb am zuletzt editiert von
        #3

        Danke @J-A-R-V-I-S

        Nun bekomme ich im log immer

        (856) Error in callback: SyntaxError: Identifier 'co2' has already been declared
        
        paul53P 1 Antwort Letzte Antwort
        0
        • L leif1

          Danke @J-A-R-V-I-S

          Nun bekomme ich im log immer

          (856) Error in callback: SyntaxError: Identifier 'co2' has already been declared
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @leif1 sagte:

          Identifier 'co2' has already been declared

          Dann lösche die Deklaration in Zeile 17

             //variabele erstellen fuer meine 3 beispiel objecte
                  var co2;
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          1
          • L Offline
            L Offline
            leif1
            schrieb am zuletzt editiert von
            #5

            Danke vielmals euch beiden, nun läuft es. Mir war nicht so ganz bewusst das "let" ebenfalls eine Variable deklariert. Man lernt nie aus :)

            1 Antwort Letzte Antwort
            0
            • J.A.R.V.I.S.J Offline
              J.A.R.V.I.S.J Offline
              J.A.R.V.I.S.
              Developer
              schrieb am zuletzt editiert von
              #6

              @leif1 das freut mich zu hören. Es gibt auch einige Unterschiede zwischen den beiden Möglichkeiten. Falls dich das näher interessiert, kannst du dir mal folgenden Artikel durchlesen (Unterschiede var und let). Ich würde sagen, dass let die schönere Variante ist.

              J.A.R.V.I.S.

              N 1 Antwort Letzte Antwort
              1
              • J.A.R.V.I.S.J J.A.R.V.I.S.

                @leif1 das freut mich zu hören. Es gibt auch einige Unterschiede zwischen den beiden Möglichkeiten. Falls dich das näher interessiert, kannst du dir mal folgenden Artikel durchlesen (Unterschiede var und let). Ich würde sagen, dass let die schönere Variante ist.

                J.A.R.V.I.S.

                N Offline
                N Offline
                Nahasapee
                schrieb am zuletzt editiert von
                #7

                @J-A-R-V-I-S
                um die Verwirrung komplett zu machen ,
                dass würde auch gehen:

                 const tVal = {"Time":"2019-11-28T16:45:07","MHZ19B":{"Model":"B","CarbonDioxide":786,"Temperature":23.0},"TempUnit":"C"}
                 const { MHZ19B: { CarbonDioxide: co2 } } = tVal;
                 if(co2)
                   log(co2);
                

                guten nacht ;)

                AlCalzoneA 1 Antwort Letzte Antwort
                0
                • N Nahasapee

                  @J-A-R-V-I-S
                  um die Verwirrung komplett zu machen ,
                  dass würde auch gehen:

                   const tVal = {"Time":"2019-11-28T16:45:07","MHZ19B":{"Model":"B","CarbonDioxide":786,"Temperature":23.0},"TempUnit":"C"}
                   const { MHZ19B: { CarbonDioxide: co2 } } = tVal;
                   if(co2)
                     log(co2);
                  

                  guten nacht ;)

                  AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @Nahasapee Ist allerdings für eine einzelne Variable nicht unbedingt leserlicher :)

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  N 1 Antwort Letzte Antwort
                  0
                  • AlCalzoneA AlCalzone

                    @Nahasapee Ist allerdings für eine einzelne Variable nicht unbedingt leserlicher :)

                    N Offline
                    N Offline
                    Nahasapee
                    schrieb am zuletzt editiert von
                    #9

                    @AlCalzone In der Kürze liegt die Würze. ;)

                    AlCalzoneA 1 Antwort Letzte Antwort
                    0
                    • N Nahasapee

                      @AlCalzone In der Kürze liegt die Würze. ;)

                      AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      schrieb am zuletzt editiert von
                      #10

                      @Nahasapee kürzer ist es auch nicht :sweat_smile:

                      const co2 = values.MHZ19B.CarbonDioxide;
                      const { MHZ19B: { CarbonDioxide: co2 } } = values;
                      

                      Imo macht diese Form der Destrukturierung nur bei mehreren Variablen Sinn.

                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                      N 1 Antwort Letzte Antwort
                      0
                      • AlCalzoneA AlCalzone

                        @Nahasapee kürzer ist es auch nicht :sweat_smile:

                        const co2 = values.MHZ19B.CarbonDioxide;
                        const { MHZ19B: { CarbonDioxide: co2 } } = values;
                        

                        Imo macht diese Form der Destrukturierung nur bei mehreren Variablen Sinn.

                        N Offline
                        N Offline
                        Nahasapee
                        schrieb am zuletzt editiert von
                        #11

                        @AlCalzone sagte in JSON parsing (verschachtelt):

                        @Nahasapee kürzer ist es auch nicht

                        Mein Frau sagt immer auf die Länge kommt es nicht an! :lying_face:

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        965

                        Online

                        32.5k

                        Benutzer

                        81.9k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe