Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON parsing (verschachtelt)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON parsing (verschachtelt)

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      leif1 last edited by

      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 Reply Last reply Reply Quote 0
      • J.A.R.V.I.S.
        J.A.R.V.I.S. Developer last edited by J.A.R.V.I.S.

        @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 Reply Last reply Reply Quote 1
        • L
          leif1 last edited by

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

          Nun bekomme ich im log immer

          (856) Error in callback: SyntaxError: Identifier 'co2' has already been declared
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @leif1 last edited by

            @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;
            
            1 Reply Last reply Reply Quote 1
            • L
              leif1 last edited by

              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 Reply Last reply Reply Quote 0
              • J.A.R.V.I.S.
                J.A.R.V.I.S. Developer last edited by

                @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 Reply Last reply Reply Quote 1
                • N
                  Nahasapee @J.A.R.V.I.S. last edited by

                  @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 😉

                  AlCalzone 1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer @Nahasapee last edited by

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

                    N 1 Reply Last reply Reply Quote 0
                    • N
                      Nahasapee @AlCalzone last edited by

                      @AlCalzone In der Kürze liegt die Würze. 😉

                      AlCalzone 1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer @Nahasapee last edited by

                        @Nahasapee kürzer ist es auch nicht 😅

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

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

                        N 1 Reply Last reply Reply Quote 0
                        • N
                          Nahasapee @AlCalzone last edited by

                          @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! 🤥

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          907
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          javascript
                          5
                          11
                          850
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo