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 @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
              • mickym
                mickym Most Active @legro last edited by mickym

                @legro ich hab dir doch einen Screenshot gepostet mit einer Lösung und JSONATA. Zum Üben kannst Du übrigens auch das JSONATA try Fenster verwenden. Links die Eingangsdaten, rechts oben Dein Code, rechts unten das Ergebnis. Das ganze kann man auch abspeichern.

                Schau mal : https://try.jsonata.org/8DLapvppx

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

                  @mickym

                  Ich bin doch schon fleißig am Üben.🙂

                  Mein erstes Ziel ..

                  011ff32a-3533-4721-b862-6ef5362bd926-image.png

                  .. habe ich schon erreicht.

                  Der JSONata-Block verhält sich ziemlich seltsam. Man kann ihn nicht anstelle von "Ergebnis" in der Summenbildung verwenden.

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

                    @legro Wenn Du JSONATA verwendest - dann brauchst Du alles andere nicht - ich habe Dir doch den Link geschickt. Wenn Du die Doku anschaust, dann referenzierst Du mit $ das aktuelle Objekt - ausserdem ist es geschickter mit JSONATA zu rechnen und lieber das Ergebnis als Liste ausgeben zu lassen.

                    Ich habe Dir doch unten den Link geschickt - da solltest Du doch das try Fenster mit Deinem Objekt bekommen haben. Um für jeden Tarif das Produkt von Preis und Startwert zu bekommen - machst Du das erst mal in JSONATA. Wenn Du Gesamtsumme haben willst geht das noch einfacher.

                    Der Link sollte Dir doch folgendes zeigen. 😉

                    f8562220-bd8c-4b4c-b499-9907f111ada7-image.png

                    Um nun die Produkte der einzelnen Tarife zu bilden:

                    9e446702-67b6-4d04-8701-405c64d9cee3-image.png

                    Du musst halt bissi üben, wenn Du Dich mit JSONATA beschäftigen willst.

                    Wie Du siehst wird nun für jeden Tarif das Produkt gebildet und in einem Array gespeichert. Das Ganze kannst Du dann auch noch aufsummieren.

                    c7c04071-cb11-4466-8bcd-b0bcedddb7f7-image.png

                    Wenn Du das dann in JSONATA Fenster alles gemacht hast - dann referenzierst Du im Blockly das Objekt auf der linken Seite einfach mit $, wie in dem Code rechts oben.

                    f2596f67-0947-439b-8a4d-725ea33268e7-image.png

                    Hier zum Import:

                    <xml xmlns="https://developers.google.com/blockly/xml">
                     <variables>
                       <variable id="NWR;`_N@3a:sTiBKQkne">Objekt</variable>
                     </variables>
                     <block type="variables_set" id="M@F*zUMa;{#yJo2.2goG" x="-1137" y="-337">
                       <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                       <value name="VALUE">
                         <block type="convert_json2object" id="wV#~g_#qRM}fhgD[;waT">
                           <value name="VALUE">
                             <block type="text" id="7@h4[@Y-M.M.tsLuCU56">
                               <field name="TEXT">{   "Tarife": [     {       "Tarif1": {         "Energiepreis": 0.3963,         "Intervall": {           "Startwert": 0,           "Endwert": 486303         },         "Zeitraum": {           "Start": "2023-01-01",           "Ende": "2023-06-30"         }       }     },     {       "Tarif2": {         "Energiepreis": 0.3328,         "Intervall": {           "Startwert": 486303,           "Endwert": null         },         "Zeitraum": {           "Start": "2023-07-01",           "Ende": "2024-06-30"         }       }     }   ] }</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="9S+u#Vzo/zuptK|}o,?9">
                           <field name="Severity">log</field>
                           <value name="TEXT">
                             <shadow type="text" id="COg%Nwdd92sEj=QP[Lt)">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="variables_get" id="N=A4,QQsE8/8~[BL])Xc">
                               <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="^5#in-UU}%!K~KPOKHz_">
                               <field name="Severity">log</field>
                               <value name="TEXT">
                                 <shadow type="text" id="-,TGC$b5|aHgxT-/9J]`">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="convert_jsonata" id="lJ3pgV,d!Gi]8s,TMKUf">
                                   <value name="EXPRESSION">
                                     <shadow type="text" id="$?E[/Hc*GGc|PsLH./zl">
                                       <field name="TEXT">$.Tarife.*.(Energiepreis * Intervall.Startwert / 1000) ~&gt; $sum()</field>
                                     </shadow>
                                   </value>
                                   <value name="TARGET">
                                     <block type="variables_get" id="$EtNHY[c50V=?^FK.SM-">
                                       <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                    </xml>
                    

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

                      @mickym

                      Vielen herzlichen Dank für deine freundliche und äußerst hilfreiche Unterstützung. Für mich ist es jedoch offenbar noch ein langer Weg, bis ich JSONata so gut beherrsche, dass ein Kodieren in JSONata schneller geht als mit Blockly.😞

                      Derzeit lese ich mich in die äußerst dürftige Dokumentation von JSONata ein. Allein schon bei dem Ausprobieren von $key, $lookup, $sum, .. begehe ich wohl typische Anfängerfehler, die mir den Spaß (noch) gründlich verderben. Aber ich will's tapfer weiter versuchen.

                      Mein erstes Ziel: Die Kosten für unseren Strombezug über alle Tarife hinweg zu ermitteln.

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

                        @legro Ja man muss das verstehen - hat bei mir auch länger gedauert. Mit der Formel unten sollte aber Dein Ziel zu erreichen sein. Wir können das ja mal durchgehen, wenn Du willst. Aber natürlich nur wenn Du willst.

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

                          @mickym

                          Oh ja, sehr gerne. Ich melde mich mit meinen Versuchen.

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

                            @legro Du sollst es einfach in dem JSONATA try Fenster machen - da Du sofort das Ergebnis siehst. Wenn dann alles stimmt brauchst Du den Code nur rauskopieren und im Blockly als JSONATA Ausdruck verwenden.

                            Wie gesagt mit dem Code:

                            $.Tarife.*.(Energiepreis * Intervall.Startwert / 1000) ~> $sum()
                            

                            hast Du alles was Du brauchst.

                            Gib einfach mal nur das $ ein und schau was im Ergebnisfenster auftaucht, dann $.Tarife usw. - und wenn Du Dir die Ergebnisse erklären kannst ist gut, wenn nicht, dann sag Bescheid.

                            Um das mit der Doku zu erklären. Das $ steht für das aktuelle Objekt - am Anfang als für alles:

                            03842591-4034-4fe5-b212-872f6d5eb2f2-image.png

                            Hier den Auszug aus der Doku:
                            1414a6ff-e7ac-44ad-a3a0-5d8b89d507a0-image.png

                            Dann probierst Du Tarife, also

                            $.Tarife
                            

                            8458d247-6dd7-4ce7-aa77-8d8671e39f5d-image.png

                            Du siehst also als Ergebnis das Array - im Ausgangsobjekt Anfang und Ende gelb markiert.

                            Nun kommt der Stern - sprich wir wollen alle Tarife bzw. Objekte haben, egal wie sie heißen:

                            $.Tarife.*
                            

                            fe260397-52a9-41e4-abce-a2a8926c4bdc-image.png

                            Mit dem Stern hast Du eine Art Wildcard oder Joker - als Platzhalter. 😉

                            f9239947-ff56-4496-9c64-4dc75508b3c2-image.png

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

                              @mickym

                              In diesem Beitrag hast du eine Link auf meine Datenstruktur zum Testen referiert. Wie hast du diesen Link erstellt?

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

                                @legro

                                @legro sagte in JSON Objekte in Liste:

                                @mickym

                                In diesem Beitrag hast du eine Link auf meine Datenstruktur zum Testen referiert. Wie hast du diesen Link erstellt?

                                Du kannst Dein Fenster teilen:

                                c1e53840-946c-453f-8ba9-dc16cf42e800-image.png

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

                                  @mickym

                                  Vielen Dank. Du warst schneller. Ich hatte es mittlerweile auch gefunden.

                                  Hier ist mein neuester Versuch: neue Struktur

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

                                    @legro Ja das Problem ist, dass Du einmal Wert und einmal Stand hast. Bist Du dafür verantwortlich und kannst das vereinheitlichen oder müssen wir das ändern?

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

                                      @mickym

                                      Hier mein erster Versuch einer Auswertung.

                                      Das Ergebnis ist nicht das gewünschte. Es müssten die Differenzen in den aufeinanderfolgenden Zählerständen (Wert) gebildet werden.

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

                                        @legro sagte in JSON Objekte in Liste:

                                        @mickym

                                        Vielen Dank. Du warst schneller. Ich hatte es mittlerweile auch gefunden.

                                        Hier ist mein neuester Versuch: neue Struktur

                                        Als erstes interessieren Dich ja nur die Stände:

                                        Also erweitern

                                        $.ZählerStände.Stände
                                        

                                        Ergebnis siehst Du ja

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

                                          @legro sagte in JSON Objekte in Liste:

                                          @mickym

                                          Hier mein erster Versuch einer Auswertung.

                                          Das Ergebnis ist nicht das gewünschte. Es müssten die Differenzen in den aufeinanderfolgenden Zählerständen (Wert) gebildet werden.

                                          Ja das ist schon klar - aber Du musst erst mal Deine Eigenschaften vereinheitlichen - mal hast Du Wert mal Stand.

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

                                            @mickym

                                            Ich habe bereits die Summe gebildet.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            987
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

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