Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSONATA Filter auf json array

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JSONATA Filter auf json array

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

      Ich habe keine Erfahrung mit JSONATA und versucht diesen json file mit Hilfe der folgenden Syntax zu parsen. Leider erhalte ich nicht das gewünschte Ergebnis. Als Filterkriterium will ich den "Namen" in der ersten Hierachiestufe verwenden.

      ${[0="BERA"].[1]] um alle Daten zu diesem Eintrag zu erhalten. Unter https://try.jsonata.org/ hat diese Expression auf eine Veränderung des Wertes [1] $[[0="BERA"].[1]] reagiert

      Mit $[[0="BERA"].[1].[1.fundingRate]] habe ich versucht ein bestimmtes Attribut auszulesen. Auch erfolglos

      Bin für jeden Hinweis dankbar.
      2025-02-22 23_13_47-JSONata Exerciser.png

      bera.json

      M mickym 3 Replies Last reply Reply Quote 0
      • M
        MCU @___manalishi last edited by MCU

        @___manalishi javascript

        let dp = '0_userdata.0.jarvis.test.jsonForum2'
        
        getData()
        
        function getData(){
            let data = JSON.parse(getState(dp).val)
            for(let i=0;i<data.length;i++){
                if(data[i][0] == "BERA"){
                    console.log(data[i][1][0]) // BinPerp
                    console.log(data[i][1][0][1].fundingRate)
                    console.log(data[i][1][1]) // HlPerp
                    console.log(data[i][1][2]) // BybitPerp
        
                }
            }
        }
        
        

        Alternativ mit filter

        function getData() {
            let data = JSON.parse(getState(dp).val);
        
            // Filtern nach "BERA"
            let result = data.filter(item => item[0] === "BERA");
        
            if (result.length > 0) {
                let beraData = result[0][1]; // Das Array mit Funding-Infos
                
                console.log(beraData[0][0]); // "BinPerp"
                console.log(beraData[0][1].fundingRate); // FundingRate für BinPerp
                console.log(beraData[1]); // HlPerp
                console.log(beraData[2]); // BybitPerp
            }
        }
        

        Wer hat das JSON erstellt?

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

          @___manalishi Ich verstehe nicht ganz, was Du genau herausbekommen willst. Das mit dem JSONATA Exerciser ist richtig, da musst Du aber einen individuellen Link erstellen. Ich werde es erst mal für Dich vorbereiten.

          1 Reply Last reply Reply Quote 0
          • ___manalishi
            ___manalishi @MCU last edited by ___manalishi

            @mcu Das JSON kommt von der API der dezetralen Kryptobörse Hyperliquid
            https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-predicted-funding-rates-for-different-venues

            M 1 Reply Last reply Reply Quote 0
            • M
              MCU @___manalishi last edited by MCU

              @___manalishi Blockly

              c291e501-d73c-4617-815f-caa9684e940b-image.png

              $[$[0] = "BERA"][0][1][0].fundingRate
              

              25a47da3-9201-4018-8897-9505d7b89ae2-image.png

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

                @___manalishi Damit kannst Du direkt im JSONATA Editor mit Deinen Daten arbeiten:

                https://try.jsonata.org/nXy0l6TXc

                ___manalishi 1 Reply Last reply Reply Quote 1
                • ___manalishi
                  ___manalishi @mickym last edited by ___manalishi

                  @mickym Vielen Dank! Ich habe die Syntax in der kurzen Zeit noch nicht 100%ig verstanden, aber es führt bei https://try.jsonata.org/nXy0l6TXc zu dem gewünschten Ziel.
                  Im IOBroker bekomme ich aktuell noch die Meldung "undefined"
                  dd04bf44-cf14-4c10-bd12-e68155ab3891-image.png

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

                    @___manalishi cb054578-601f-4074-a34a-9dfad85aea81-image.png
                    gelöst. Danke für deine Unterstützung!

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

                      7a83ce5c-eb2b-4f21-9693-5e237d0ac8aa-image.png
                      81d1ff9b-5da1-4cbc-a892-4ca69086d07c-image.png

                      Ich bekomme beim parsen des JSON files in IOBroker leider "undefined", obwohl im Exerciser ein Ergebnis angezeigt wird. Was mache ich hier falsch?

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

                        @___manalishi Machmal vor das data ein $. Zeichen - damit er den aktuellen Kontext nimmt

                        $.data.rows[0].fundingRate
                        

                        und prüfe ggf. mit dem debug puzzle Teil, dass result auch ein Ergebnis zurückliefert.

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

                          @mickym 11d4b1c2-45ee-4d8c-b436-4c379be442ce-image.png

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

                            @mickym 64afd639-90fa-4ab1-9c80-5ad6dcb66474-image.png

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

                              @___manalishi Ja Du hast auch Objekt nach JSON konvertiert und nicht JSON nach Objekt

                              Du brauchst dieses Teil
                              5e54d196-5f1c-4f9c-97d0-9086ba17a3d4-image.png

                              und nicht umgekehrt. Du arbeitest mit Objekten und nicht mit JSON strings.

                              558418af-886c-454f-a746-19a3c26f43bd-image.png

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

                                @mickym da habe ich aus Verzweiflung mal ausprobiert. Hier mit JSON nach Objekt:
                                1b17e6c7-8199-4c51-bdd5-8b585a20cd24-image.png

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

                                  @___manalishi Teile mit mir Deinen JSONATA Exerciser, dann probiere ich selbst. Ich vermute dass in dem result noch was unterschiedlich zum Exerciser ist.

                                  5fdb3664-9380-44ac-8711-0eb08625d676-image.png

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

                                    @mickym https://try.jsonata.org/2Txs7duVq

                                    hier mein Result:

                                    Result: {'code': 0, 'msg': 'OK', 'data': {'rows': [{'symbol': '.BERAUSDTFR8H', 'fundingRate': '0.00003647', 'fundingTime': 1743264000000, 'intervalSeconds': 14400}]}}

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

                                      @mickym sollte der debug Baustein mit JSON nach Objekt ein Ergenis ausgeben?

                                      a28aaa48-4a1e-4c31-8d31-3316497ad911-image.png

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

                                        @___manalishi Nein aber der code darf auch nicht in ' stehen. Ggf. musst Du nichts konvertieren.

                                        e76eefef-20ff-42a0-b583-659d8cf87806-image.png

                                        Wenn ich Dein Objekt aus dem JSONATA Exerciser ins Blockly übernehme dann funktioniert alles.

                                        Hier zum Import:

                                        <xml xmlns="https://developers.google.com/blockly/xml">
                                         <variables>
                                           <variable id="8+=Mk?BD}YCcGl~4E)j|">Objekt</variable>
                                         </variables>
                                         <block type="variables_set" id="8TUEPFER^60tpZeXyo6g" x="-137" y="63">
                                           <field name="VAR" id="8+=Mk?BD}YCcGl~4E)j|">Objekt</field>
                                           <value name="VALUE">
                                             <block type="convert_json2object" id="I#fP01}u(y@zi]+ky=U#">
                                               <value name="VALUE">
                                                 <block type="text" id="FPjE:co!sqd}=j?;!5o/">
                                                   <field name="TEXT">{   "code": 0,   "data": {     "rows": [       {         "fundingRate": "0.00003647",         "fundingTime": 1743264000000,         "intervalSeconds": 14400,         "symbol": ".BERAUSDTFR8H"       }     ]   },   "msg": "OK" }</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="debug" id="R:3IdXPc-Ye6*0flWePD">
                                               <field name="Severity">info</field>
                                               <value name="TEXT">
                                                 <shadow type="text" id="BKx/`I0xv2,QV6c:jxKa">
                                                   <field name="TEXT">test</field>
                                                 </shadow>
                                                 <block type="variables_get" id="PpY08lt65(HhfilRUlil">
                                                   <field name="VAR" id="8+=Mk?BD}YCcGl~4E)j|">Objekt</field>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="debug" id="k08ZC410l/7`T|+g_+w@">
                                                   <field name="Severity">info</field>
                                                   <value name="TEXT">
                                                     <shadow type="text" id=",T!NCf4e|u/ADp:g1bn[">
                                                       <field name="TEXT">test</field>
                                                     </shadow>
                                                     <block type="convert_jsonata" id="u}[_Z`KWHAeHkdE@@V?=">
                                                       <value name="EXPRESSION">
                                                         <shadow type="text" id="eg-6.rV=oGTM`RArquVg">
                                                           <field name="TEXT">$.data.rows[0].fundingRate</field>
                                                         </shadow>
                                                       </value>
                                                       <value name="TARGET">
                                                         <block type="variables_get" id="n+aI}jp_T]nxZ439rGaK">
                                                           <field name="VAR" id="8+=Mk?BD}YCcGl~4E)j|">Objekt</field>
                                                         </block>
                                                       </value>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                         <block type="convert_json2object" id="1-ME3y(y.YrZvl:v}Pb`" x="388" y="438"></block>
                                        </xml>
                                        

                                        Es muss also an Deinem result liegen, dass das KEIN Objekt ist, sondern entweder JSON String oder irgendwie kein Objekt da rauskommt.

                                        Ansonsten siehst Du, dass Dein Code auch im Blockly tut.

                                        Vielleicht ist result schon ein Objekt oder Du musst wie gesagt falls das ein JSON String ist, diesen in ein Objekt wandeln. Irgendwas stimmt da nicht. Prinzipiell ist aber Dein Code richtig, wie Du siehst.

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

                                          @___manalishi sagte in JSONATA Filter auf json array:

                                          @mickym da habe ich aus Verzweiflung mal ausprobiert. Hier mit JSON nach Objekt:
                                          1b17e6c7-8199-4c51-bdd5-8b585a20cd24-image.png

                                          Mach da mal das Result weg - also keine Kombination - da wird intern dann das Objekt in Text gewandelt. Also die grünen Teile weg.

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

                                            @mickym Ich habe bevor ich zum Exerciser bin den Result

                                            {'code': 0, 'msg': 'OK', 'data': {'rows': [{'symbol': '.BERAUSDTFR8H', 'fundingRate': '0.0000337', 'fundingTime': 1743278400000, 'intervalSeconds': 14400}]}}
                                            

                                            mit https://jsonformatter.curiousconcept.com/# geprüft und dabei wohl umformatiert
                                            Der "original" result zeigt einen syntax Fehler
                                            c435dea0-8a81-47f3-940e-1dbf5d24a89b-image.png
                                            hier mein abfragescript mit response.json
                                            4632f66a-413c-4405-8e0e-4910e309acc1-image.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            889
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            25
                                            551
                                            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