Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. JSON Objekte in Liste

    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 Objekte in Liste

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @paul53 last edited by

      eee92cff-e6b9-4991-ac91-608b91d562d0-image.png

      Also Attribut:

      Tarife.0.Tarif1.Intervall.Endwert
      
      1 Reply Last reply Reply Quote 0
      • L
        legro @paul53 last edited by legro

        @paul53 @mickym

        Vielen Dank euch beiden für die schnelle und tolle Hilfe!

        Folgendes habe ich probiert ..

        b05909a9-534f-4c59-a658-4c8b1f3e1562-image.png

        Die erste Lösung hat direkt funktioniert.

        Beim zweiten Beispiel erhalte ich folgende Fehlermeldung ..

        16:45:22.015	info	javascript.0 (2182) Start javascript script.js.TestSkripte.JSON_Test
        16:45:22.021	info	javascript.0 (2182) script.js.TestSkripte.JSON_Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        16:45:22.022	error	javascript.0 (2182) script.js.TestSkripte.JSON_Test: TypeError: Cannot read properties of undefined (reading '1')
        16:45:22.022	error	javascript.0 (2182) at script.js.TestSkripte.JSON_Test:5:27
        16:45:22.022	error	javascript.0 (2182) at script.js.TestSkripte.JSON_Test:8:3
        

        Habe ich dabei etwas falsch gemacht?

        mickym paul53 3 Replies Last reply Reply Quote 0
        • mickym
          mickym Most Active @legro last edited by

          @legro Na der Tarif2 ist Bestandteil des 2. Array Elements.

          1413bab7-d32f-41a8-9705-8fe42af55020-image.png

          Tarife.1.Tarif2.Intervall.Startwert
          

          Deswegen musst Du mit Tarife.1 das 2. Array Element referenzieren. Ich hab bewußt den Startwert genommen, da der Endwert dort ja null ist.

          1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @legro last edited by mickym

            @legro Du musst ja vorher das Array erst einer Variablen zuweisen. Deswegen finde ich das umständlicher. Du setzt ja Tarif auf das ganze Objekt - musst aber erst mit dem Attribut Tarife das Array aus dem Objekt herauslösen.

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

              @legro sagte : Habe ich dabei etwas falsch gemacht?

              Du hast das Attribut "Tarife" vergessen, um die Liste zu erzeugen und außerdem eine zweite Variable Liste verwendet.

              Blockly_temp.JPG

              1 Reply Last reply Reply Quote 0
              • L
                legro @mickym last edited by legro

                @mickym

                Jetzt wollte ich's wissen! Um das Ganze besser zu verstehen, habe ich die Objektnamen Tarif1, Tarif2 weggelassen ..

                {
                  "Tarife": [
                    {
                      {
                        "Name" : "Tarif1"
                        "Energiepreis": 0.3963,
                        "Intervall": {
                          "Startwert": 0,
                          "Endwert": 486303
                        },
                        "Zeitraum": {
                          "Start": "2023-01-01",
                          "Ende": "2023-06-30"
                        }
                      }
                    },
                    {
                      {
                        "Name" : "Tarif2"
                        "Energiepreis": 0.3328,
                        "Intervall": {
                          "Startwert": 486303,
                          "Endwert": null
                        },
                        "Zeitraum": {
                          "Start": "2023-07-01",
                          "Ende": "2024-06-30"
                        }
                      }
                    }
                  ]
                }
                

                .. und folgendes kodiert ..

                544197fd-7609-4093-a030-66ec725e8b4c-image.png

                Dies funktioniert nicht mehr. Ich erhalte, egal auf was ich selektiere, stets null.

                17:13:13.763	info	javascript.0 (2182) Start javascript script.js.TestSkripte.JSON_Test
                17:13:13.771	info	javascript.0 (2182) script.js.TestSkripte.JSON_Test: null
                17:13:13.771	info	javascript.0 (2182) script.js.TestSkripte.JSON_Test: null
                17:13:13.771	info	javascript.0 (2182) script.js.TestSkripte.JSON_Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                

                Welchen Denkfehler habe ich nun schon wieder gemacht?

                paul53 mickym 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @legro last edited by paul53

                  @legro sagte: Welchen Denkfehler habe ich nun schon wieder gemacht?

                  Du hast Objekte ohne Bezeichner. Richtig:

                  {
                    "Tarife": [
                      {
                          "Name" : "Tarif1",
                          "Energiepreis": 0.3963,
                          "Intervall": {
                            "Startwert": 0,
                            "Endwert": 486303
                          },
                          "Zeitraum": {
                            "Start": "2023-01-01",
                            "Ende": "2023-06-30"
                          }
                      },
                      {
                          "Name" : "Tarif2",
                          "Energiepreis": 0.3328,
                          "Intervall": {
                            "Startwert": 486303,
                            "Endwert": null
                          },
                          "Zeitraum": {
                            "Start": "2023-07-01",
                            "Ende": "2024-06-30"
                          }
                      }
                    ]
                  }
                  

                  Damit funktioniert es auch so:

                  Blockly_temp.JPG

                  Die Wandlung "JSON nach Objekt" ist unnötig, denn das macht der Block "Attribut" von sich aus.

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

                    @paul53

                    Damit funktioniert es auch so: ..

                    Ich bin verwirrt. Tut es eben nicht. Oben habe ich die Fehlermeldung dokumentiert.

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

                      @legro sagte: Tut es eben nicht.

                      Du musst das (ungültige) Objekt (JSON) korrigieren: Lösche Zeilen 3, 15, 17 und 30. Außerdem fehlt jeweils ein Komma hinter "Tarif1" und "Tarif2".

                      L 1 Reply Last reply Reply Quote -1
                      • mickym
                        mickym Most Active @legro last edited by

                        @legro sagte in JSON Objekte in Liste:

                        etzt wollte ich's wissen! Um das Ganze besser zu verstehen, habe ich die Objektnamen Tarif1, Tarif2 weggelassen .

                        Du darfst das nicht einfach weglassen. Jedes Objekt wird durch eine Eigenschaft festgelegt und die hast Du damit weggenommen.

                        Ein JSON Objekt wird durch geschweifte Klammern definiert, dabei besteht es aus verschiedenen Eigenschaften in Anführungszeichen und einem Wert, der durch einen Doppelpunkt getrennt ist.

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

                          @paul53 @mickym

                          Ich habe verstanden worin mein Fehler bestand. Die {..} um die Listenobjekte müssen weg, wenn diese Objekte keinen Namen (mehr) besitzen.

                          Aber es funktioniert noch immer nicht. Egal auf was ich selektiere, ich erhalte ich in den nachfolgenden Beispielen stets null.
                          2ea22af8-e48b-4a29-8e3e-34a63c88fe3b-image.png

                          Ebenso erhalte ich die Liste nicht mehr ausgegeben, wenn ich ..
                          58b5410c-0bff-48cd-8dfb-9639b66d138f-image.png

                          Was mache ich nun schon wieder falsch?

                          paul53 mickym 2 Replies Last reply Reply Quote 0
                          • paul53
                            paul53 @legro last edited by

                            @legro sagte: schon wieder falsch?

                            Zeig mal das JSON.

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

                              @paul53

                              Es ist (hoffentlich) identisch mit dem von dir vorgeschlagenen JSON.

                              {
                                "Tarife": [
                                    {
                                      "Name" : "Tarif1"
                                      "Energiepreis": 0.3963,
                                      "Intervall": {
                                        "Startwert": 0,
                                        "Endwert": 486303
                                      },
                                      "Zeitraum": {
                                        "Start": "2023-01-01",
                                        "Ende": "2023-06-30"
                                      }
                                  },
                                    {
                                      "Name" : "Tarif2"
                                      "Energiepreis": 0.3328,
                                      "Intervall": {
                                        "Startwert": 486303,
                                        "Endwert": null
                                      },
                                      "Zeitraum": {
                                        "Start": "2023-07-01",
                                        "Ende": "2024-06-30"
                                      }
                                    }
                                ]
                              }
                              

                              Ich habe einen Verdacht ..

                              Damit die Selektion via "." anstelle von [Index] funktioniert, müssen die Listenobjekte benannt sein.

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

                                @legro sagte: identisch mit dem von dir vorgeschlagenen JSON.

                                @paul53 sagte in JSON Objekte in Liste:

                                Außerdem fehlt jeweils ein Komma hinter "Tarif1" und "Tarif2".

                                Zeilen 4, 16.

                                1 Reply Last reply Reply Quote 1
                                • mickym
                                  mickym Most Active last edited by

                                  Hier mal die Definitionen, die Du verinnerlichen musst:

                                  =======================================================================
                                  Also ein ARRAY beginnt IMMER mit einer ECKIGEN Klammer und schließt mit einer ECKIGEN Klammer ab und die einzelnen Elemente werden durch ein Komma getrennt.

                                  =======================================================================

                                  Also ein OBJEKT beginnt IMMER mit einer GESCHWEIFTEN Klammer und schließt mit einer GESCHWEIFTEN Klammer ab und die einzelnen Elemente werden durch ein Komma getrennt. Ein Element besteht immer aus einer Eigenschaft in Anführungszeichen und dann ein Doppelpunkt und dann dem Wert der Eigenschaft. So wie Du es zuerst gemacht hast.

                                  =======================================================================

                                  Und wie Du dann üben kannst - kannst an diesem Mammut Thread sehen. 😉

                                  https://forum.iobroker.net/post/905403

                                  L 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @legro last edited by mickym

                                    @legro Und hier hängt es halt davon ab, ob Du mit Listen arbeiten willst oder nicht. Ich habe Dir ja den direkten Pfad gezeigt, weil ich den Umweg über Listen zu umständlich fand.

                                    Ich empfehle Dir grundsätzlich so ein Tool wie: https://jsonformatter.org/ zu verwenden - da siehst Du schon auf den ersten Blick dass Du Dich verheddert hast. 😉

                                    d844040d-3f89-47d2-92e1-592601ddd0e9-image.png

                                    was gefehlt hat, sind die beiden Kommas. 😉 Habe ich im Screenshot markiert.

                                    621f8546-f882-43b4-8755-29224d302263-image.png

                                    1 Reply Last reply Reply Quote 1
                                    • L
                                      legro @mickym last edited by legro

                                      @mickym @paul53

                                      Es funktioniert. Es lag natürlich an den fehlenden Kommas.

                                      VIELEN DANK FÜR EURE GEDULD UND GROßARTIGE HILFE

                                      Ich versuche einmal eine Zusammenfassung ..

                                      In Blockly funktioniert die in ARRAYs übliche Syntax zum Selektieren auf die einzelnen Elemente nicht mittels der Angabe [Index], sondern ebenfalls über "."

                                      In den Anfängen hatte ich kodiert ..

                                      Tarife[1].Name
                                      Tarife[0].Intervall.Endwert
                                      ..

                                      Auf die Idee, dass hier, der Index zwischen zwei Punkten einzuschließen, es tut, bin ich nicht gekommen.

                                      L 1 Reply Last reply Reply Quote 0
                                      • L
                                        legro @legro last edited by legro

                                        Hat sich erledigt.

                                        mickym 1 Reply Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @legro last edited by mickym

                                          @legro Ja das kannst Du auch nicht. Insbesondere nicht mit Blockly alleine, sondern wenn Du JSONATA verwendest - das ist eine geniale Bibliothek. 😉

                                          https://docs.jsonata.org/overview

                                          78a77db7-6d18-45d7-8562-18a30e99f02d-image.png

                                          L 1 Reply Last reply Reply Quote 0
                                          • L
                                            legro @mickym last edited by legro

                                            @mickym

                                            Zum Formatieren von JSON-Ausdrücken nutze ich Visual Studio Code.

                                            Wie kann man JSONata in ioBroker verwenden?

                                            Unter Konvertierung habe ich dazu in Blockly den Baustein JSON Ausdruck .. gefunden. Ich probiere das mal aus.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            833
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            94
                                            4621
                                            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