Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] JSON in Blockly zerlegen

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [gelöst] JSON in Blockly zerlegen

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

      50817aed-d812-4a3d-9039-9391b8e40a09-grafik.png

      ... beim parsen der o.g. JSON betrete ich Neuland und komme in Blockly nicht (richtig) weiter. Das hier klappt mit Ergebnis="v0.4.2" ...
      b9964c64-807a-46ae-87e2-d75b6a79f492-grafik.png

      Wenn ich z.B. "box.energyP" eingebe bekomme ich nix. Wenn ich "box" statt "wbec.version" eingebe bekomme ich als Ergebnis den komletten Inhalt des ARRAY's und kein einzelnes OBJEKT.
      Danke für's anschieben ...

      paul53 BananaJoe 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @RaspiUser last edited by

        @raspiuser sagte: anschieben ...

        Bild_2022-01-10_111211.png

        RaspiUser 1 Reply Last reply Reply Quote 1
        • BananaJoe
          BananaJoe Most Active @RaspiUser last edited by BananaJoe

          @raspiuser Ich nutze dafür gerne den JSON-Pathfinder: https://jsonpathfinder.com/
          Da kopierts du den JSON rein, Beautify schadet nicht und dann rechts den Wert auswählen den man haben will.

          Oben rechts steht dann der richtige Pfad. Je nachdem wohin du das übernimmst musst du das erste x. weglassen.
          wbec.version funktionierte, da kannst du dir dann die Umsetzung abschauen.

          RaspiUser 1 Reply Last reply Reply Quote 1
          • RaspiUser
            RaspiUser @BananaJoe last edited by

            @bananajoe
            OK, grundsätzlich ein Weg der besser zu meinem ursprünglichen Ansatz paßt (die Adresse merke ich mir). Aber egal ob ich "x.box[0].energyP" oder "box[0].energyP" oder andere Kombinationen aus dem "box[0]. ..."-Pfad verwende bekomme ich kein Ergebnis (Mit z.B. "wbec.version" oder "wifi.mac" sehe ich das Passende).
            1c14acae-0ff0-4ad8-b859-da88f41769a5-grafik.png

            Muss wohl irgendwie mit den ARRAY und OBJEKT Klammern zusammenhängen ...
            Eine Erklärung !? 😕

            Homoran BananaJoe 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @RaspiUser last edited by Homoran

              @raspiuser sagte in JSON in Blockly zerlegen:

              Muss wohl irgendwie mit den ARRAY und OBJEKT Klammern zusammenhängen ...

              richtig!
              box ist ein array, dass du nicht einfach über box.Item zerlegen kannst.
              Dazu musst du erst das Array "finden", und anschließend dieses zerlegen

              und die eckigen "Array-Klammern) funktionieren nicht beim zerlegen eines JSON

              1 Reply Last reply Reply Quote 0
              • RaspiUser
                RaspiUser @paul53 last edited by

                @paul53

                OK, dass ist jetzt "Blockly für Fortgeschrittene", also nix für mich. 🤕
                Das ich bei "url" meine Adresse eintrage (oder?) ist ja noch klar. Für "Object ID" muss ich (wahrscheinlich) einen Datenpunkt anlegen (aber wie?). Und den Rest der Elemente hab ich noch nie verwendet.
                Und wie binde ich jetzt "debug" ein damit ich sehe was passiert ?
                Wäre prima, wenn Du dazu noch ein paar Worte für einen Anfänger verlierst ... 🙄
                Danke

                1 Reply Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @RaspiUser last edited by Homoran

                  @raspiuser @Homoran öhm ja. Ich nutze den Path Finder in vielen anderen Programmen, da kann ich in der Regel das Element tatsächlich in [x] angeben. Bei Blockly musste ich das noch nicht nutzen

                  Also, wie im Beispiel von @paul53 noch den in der Liste Block um zu an deren Ende du das Element auswählen kannst

                  Ich meine nativ in JavaScript funktioniert auch die Schreibweise vom JSON Path Finder, müsste aber in meinen Skripten suchen ob ich da überhaupt den Fall mit mehreren Elementen gleichen Names hatte

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @BananaJoe last edited by

                    @bananajoe hab dich mal editiert 😉
                    ohne code-tags wurde das sinnenstellt

                    BananaJoe 1 Reply Last reply Reply Quote 0
                    • BananaJoe
                      BananaJoe Most Active @Homoran last edited by

                      @homoran und ich habe mich gerade gefragt wie das [x] rot wurde ...

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @BananaJoe last edited by

                        @bananajoe Das war vorher eine Checkbox. Und alles davor war weg

                        RaspiUser 1 Reply Last reply Reply Quote 0
                        • RaspiUser
                          RaspiUser @Homoran last edited by

                          @homoran @BananaJoe

                          ... ich hatte bereits erwähnt, dass ich "Blockly Neuland" betreten habe. Über einfache "IF ... THEN" Skripte (Sozusagen Kreisliga) bin ich (noch) nicht hinaus gekommen.
                          Wenn ihr Beide (Champions League) euch unterhaltet kann ich nur mit offenem Mund zuhören. Ich habe probiert der Diskussion zu folgen aber es gelingt mir nicht wirklich ... sorry. 😢

                          Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?! 😰

                          Und: Ich habe eine Doku zu blockly ...https://hobbyblogging.de/iobroker-blockly
                          Die werde ich mir mal "unter das Kopfkissen" legen. Habt ihr da noch eine weitere Empfehlung ?

                          Homoran Asgothian 2 Replies Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @RaspiUser last edited by

                            @raspiuser sagte in JSON in Blockly zerlegen:

                            Wenn ihr Beide (Champions League)

                            Danke für die Blumen, aber ich bin auch nur ein einfacher User (vielleicht extended Mode)

                            Dann nimm mal deine Antwort (result) und kopiere sie bei http://jsonviewer.stack.hu/ rein und sieh dir mal die Struktur an.
                            Ich hätte das gerne für dich gemacht, aber ein Screenshot lässt sich nicht als Text kopieren 😞

                            @raspiuser sagte in JSON in Blockly zerlegen:

                            Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?!

                            Dein Ansatz war ja für ein reines json vollkommen richtig.
                            Nur ein Element (box) dieses JSON ist ein Array.

                            Dieses musst du anders behandeln.

                            1 Reply Last reply Reply Quote 1
                            • Asgothian
                              Asgothian Developer @RaspiUser last edited by

                              @raspiuser sagte in JSON in Blockly zerlegen:

                              Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?! 😰

                              Und: Ich habe eine Doku zu blockly ...https://hobbyblogging.de/iobroker-blockly
                              Die werde ich mir mal "unter das Kopfkissen" legen. Habt ihr da noch eine weitere Empfehlung ?

                              Das ist schon einmal ein guter Anfang. Allerdings fürchte ich das Du bei dem Verständnis weniger am Blockly und mehr an der vorhandenen Datenstruktur knabberst:

                              nehmen wir einfach mal das folgende Objekt:

                              { 
                                 "wbec": {
                                   "inhalt1":"1",
                                  "inhalt2":"2",
                                 },
                                 "data": [
                                   {
                                     "i1": 1,
                                     "i2":2,
                                   },
                                   {
                                     "i1": 55,
                                     "i2":56,
                                   } 
                                 ],
                                 "raw":"somerawtexthere:"
                              }
                              

                              Auf der obersten Ebene hat dieses Objekt 3 Properties, auf die du mit Namen zugreifen kannst. Das sind wbec, data und raw.

                              Die Property raw ist einfach - dahinter steht nur ein Text.
                              Die Property wbec ist etwas komplexer - dieses ist wieder ein JSON Objekt mit den Properties inhalt1 und inhalt2. Auf diese kannst du direkt (Attribut wbec.inhalt1 vom Objekt ...) zugreifen. Alternativ weist du den Wert von Attribut wbec vom Objekt ... einer Variable zu, und nutzt dann Attribut Inhalt1 vom Objekt... nochmal, wobei du die Variable als Objekt andockst.
                              Die Property data ist noch eine ebene komplexer. Dabei handelt es sich um ein array - ein Feld von verschiedenen Objekten. Erkennbar ist das an [ und ] die Anfang und Ende des Arrays bezeichnen. Auf den Inhalt des Arrays kannst du nur über einen Index zugreifen. Dieser beginnt mit 0, sprich wenn die Variable meinFeld ein Array ist, dann ist meinFeld[0] der erste Eintrag im Array, meinFeld[1] dann der 2. und so weiter. In dem oben stehenden Beispiel ist also unter der Property data ein Array mit 2 Einträgen eingetragen.
                              Problematisch ist das der Baustein Attribut ... vom Objekt ... nur auf reines JSON angewendet werden kann. Dementsprechend funktioniert Attribut wbec.box[0].energyP ... nicht. In so einem Fall musst du erst das Array extrahieren:
                              BoxArray = Attribut wbec.box vom Objekt...
                              um dann davon den entsprechenden Eintrag zu holen.

                              Jetzt wird es leider hässlich. Irgendjemand hat beschlossen dass

                              • Arrays in Blockly als Listen geführt werden
                              • Listen einträge von 1 bis n haben, nicht 0 bis n-1 wie Arrays in JS.

                              Dementsprechend bekommst Du also deine Objekt in dem du den Baustein `aus der Liste BoxArray nimm den 1. Eintrag' nutzt.

                              Der Baustein mit dem du letztendlich auf das Attribut energyP kommst lautet also:
                              Attribut EnergyP vom Objekt aus der Liste BoxArray nimm den 1. Eintrag

                              Ich habe leider aktuell keinen Zugriff auf Blockly, daher kann ich das nicht direkt als Blockly darstellen.

                              Ich hoffe es hat trotzdem geholfen.

                              A.

                              RaspiUser 1 Reply Last reply Reply Quote 3
                              • RaspiUser
                                RaspiUser @Asgothian last edited by

                                @asgothian said in JSON in Blockly zerlegen:

                                Ich hoffe es hat trotzdem geholfen.

                                UND WIE !!!! 👍

                                Dank deinen ausfürhrlichen Erläuterungen 👏 konnte ich es gut nachvollziehen (ob ich es verstanden und erneut anwenden kann wird sich noch zeigen). Und mit dem Blockly-Hinweisen von @paul53 (Danke!) sieht es jetzt so aus und funktioniert.

                                46695fac-cbd9-443a-92fc-caacfe7b9ac9-grafik.png

                                Danke auch an @BananaJoe und @Homoran

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @RaspiUser last edited by

                                  @raspiuser sagte: ob ich es verstanden

                                  Anscheinend noch nicht so richtig: Die Variable boxarray enthält kein Array, sondern ein Objekt.

                                  RaspiUser 1 Reply Last reply Reply Quote 0
                                  • RaspiUser
                                    RaspiUser @paul53 last edited by

                                    @paul53 said in [gelöst] JSON in Blockly zerlegen:

                                    Die Variable boxarray enthält kein Array, sondern ein Objekt.

                                    OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?

                                    paul53 Asgothian RaspiUser 3 Replies Last reply Reply Quote 0
                                    • paul53
                                      paul53 @RaspiUser last edited by paul53

                                      @raspiuser sagte: enthält jetzt über "in der Liste..." weitere Objekte

                                      Die Liste "box" enthält ein Objekt, weshalb ich die Variable mit box1 (1. Element der Liste) bezeichnet hatte.
                                      Ein Objekt enthält mehrere Attribute, auf die über ihren Bezeichner (z.B. "energyP") zugegriffen werden kann.

                                      1 Reply Last reply Reply Quote 0
                                      • Asgothian
                                        Asgothian Developer @RaspiUser last edited by

                                        @raspiuser sagte in [gelöst] JSON in Blockly zerlegen:

                                        @paul53 said in [gelöst] JSON in Blockly zerlegen:

                                        Die Variable boxarray enthält kein Array, sondern ein Objekt.

                                        OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?

                                        Prinzipiell, ja. Besser wäre aber die Konstruktion so:

                                        Screen Shot 2022-01-11 at 17.48.37 .png

                                        Sprich so wie @paul53 es geschrieben hat.

                                        Das verstehst du dann auch in einem Jahr noch.

                                        RaspiUser 1 Reply Last reply Reply Quote 0
                                        • RaspiUser
                                          RaspiUser @RaspiUser last edited by

                                          @paul53

                                          OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?

                                          Das Array wird über "in der Liste..." in ein Objekt zerlegt und enthält die Attribute, die ich mit "Attribut ... vom Objekt" auslesen kann.
                                          So richtig formuliert ?

                                          paul53 1 Reply Last reply Reply Quote 0
                                          • RaspiUser
                                            RaspiUser @Asgothian last edited by

                                            @asgothian said in [gelöst] JSON in Blockly zerlegen:

                                            Das verstehst du dann auch in einem Jahr noch.

                                            Schaun'mer mal ... aber wie immer ... es gibt verschiede Lösungswege

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            22
                                            3181
                                            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