Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Ersten Eintrag aus JSON entfernen

    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

    Ersten Eintrag aus JSON entfernen

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

      Hallo. Wie kann ich aus einem Json-Datenpunkt den ersten Eintrag entfernen.
      Mein Json schaut so aus:
      73c64ab8-ee78-45b8-999f-b054da9d25d3-image.png
      Nun möchte ich z.B. das um 13 Uhr der erste Eintrag wo das Feld Zeit-beginn auf 13:00 steht, entfernt wird, um 14 Uhr dann wieder usw.
      Geht das mit einem Blockly?

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

        @manfredhi sagte: den ersten Eintrag entfernen.

        Wozu?

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

          @paul53 sagte in Ersten Eintrag aus JSON entfernen:

          Wozu?

          Soll immer mit der gerade aktuellen STunde beginnen.

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

            @manfredhi sagte: Soll immer mit der gerade aktuellen STunde beginnen.

            Das kann man dort berücksichtigen, wo das JSON ausgewertet wird.

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

              851aa659-fbfe-4f9b-b7d0-733c7c3e3627-image.png

              <xml xmlns="https://developers.google.com/blockly/xml">
               <variables>
                 <variable id=";po#/$v(8.UbHdHNkx[6">Objekt</variable>
               </variables>
               <block type="variables_set" id=":=#[V+q{~-1q78b_H^FF" x="-1137" y="-687">
                 <field name="VAR" id=";po#/$v(8.UbHdHNkx[6">Objekt</field>
                 <value name="VALUE">
                   <block type="convert_json2object" id="?vV.vvxZ^NQN^_lWU1f}">
                     <value name="VALUE">
                       <block type="text" id="+fF--6Ew-2u1R;P~2mBq">
                         <field name="TEXT">{   "data": [     {       "Zeit-Beginn": "13:00"     }, {       "Zeit-Beginn": "14:00"     }, {       "Zeit-Beginn": "15:00"     }, {       "Zeit-Beginn": "16:00"     }   ] }</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <next>
                   <block type="debug" id="Di9b3@!X-|w!(OH[MyQR">
                     <field name="Severity">log</field>
                     <value name="TEXT">
                       <shadow type="text" id="Qc!nM@ch{Sc_{l1rPEtk">
                         <field name="TEXT">test</field>
                       </shadow>
                       <block type="variables_get" id="BRJ*7NTHanJ(0mYxIgZP">
                         <field name="VAR" id=";po#/$v(8.UbHdHNkx[6">Objekt</field>
                       </block>
                     </value>
                     <next>
                       <block type="debug" id="CSzbUrdljdY[mU6V(Y9H">
                         <field name="Severity">log</field>
                         <value name="TEXT">
                           <shadow type="text" id="3TF}V:USjkEO{0|$k.HC">
                             <field name="TEXT">test</field>
                           </shadow>
                           <block type="convert_jsonata" id="=ZN{fKMn7@2JC^*jQ1/8">
                             <value name="EXPRESSION">
                               <shadow type="text" id="8OI}[4dY`zbl|(X*@@%@">
                                 <field name="TEXT">{"data":$.data#$i[$i&gt;0]}</field>
                               </shadow>
                             </value>
                             <value name="TARGET">
                               <block type="variables_get" id="8pAGf+2-KQ#4,J~^P=S~">
                                 <field name="VAR" id=";po#/$v(8.UbHdHNkx[6">Objekt</field>
                               </block>
                             </value>
                           </block>
                         </value>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
              </xml>
              

              M 2 Replies Last reply Reply Quote 1
              • M
                ManfredHi @mickym last edited by ManfredHi

                @mickym
                Es funktioniert. DANKE. nur ich versteh diese Syntax im JSONata Ausdruck überhaupt nicht.

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

                  @mickym
                  noch eine Frage dazu: Was muss ich machen, wenn z.B. aus irgendeinem Grund das Script nicht gelaufen ist und dann z.B. nicht nur der Eintrag 0 sondern auch der nächste z.b. entfernt werden muss. Geht das mit einer Schleife oder so?

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

                    @manfredhi Na Du kannst es auch ohne JSONATA machen - wird halt nur umständlicher.
                    Wenn du es ohne JSONATA machst, dann musst Du auch aus dem ganzen ein Objekt machen.
                    Aus diesem Objekt weist Du einer neuen Liste das Attribut data zu.
                    Aus dieser Liste ermittelst Du die Anzahl Elemente
                    Dann nimmst Du aus dieser Liste eine Teilliste vom 2. bis zur Anzahl Elemente.
                    Dann wandelst Du das wieder in einen String und setzt "{'data':" + String + "}" dahinter. Dann hast Du in etwa das was wir in JSONATA gemacht haben.

                    Ansonsten muss man es halt lernen.
                    https://try.jsonata.org/R0PG0QFim

                    fangen wir von Anfang an

                    mit dem $ beziehst Du Dich auf das Ausgangobjekt. Also den Inhalt der Variable objekt.

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

                      @manfredhi Ja kannst Du machen - mit jedem Durchlauf wird das 1. Element entfernt. Oder Du kannst direkt mehrere Objekte entfernen in dem Du die Bedingung des Filters änderst.

                      Mit $i>1 wird das 0. und das 1. Element entfernt - in JS oder JSONATA beginnt man immer mit 0 zu zählen.

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

                        @mickym sagte in Ersten Eintrag aus JSON entfernen:

                        @manfredhi Na Du kannst es auch ohne JSONATA machen - wird halt nur umständlicher.
                        Wenn du es ohne JSONATA machst, dann musst Du auch aus dem ganzen ein Objekt machen.
                        Aus diesem Objekt weist Du einer neuen Liste das Attribut data zu.
                        Aus dieser Liste ermittelst Du die Anzahl Elemente
                        Dann nimmst Du aus dieser Liste eine Teilliste vom 2. bis zur Anzahl Elemente.
                        Dann wandelst Du das wieder in einen String und setzt "{'data':" + String + "}" dahinter. Dann hast Du in etwa das was wir in JSONATA gemacht haben.

                        Ansonsten muss man es halt lernen.
                        https://try.jsonata.org/R0PG0QFim

                        fangen wir von Anfang an

                        mit dem $ beziehst Du Dich auf das Ausgangobjekt. Also den Inhalt der Variable objekt.

                        Weiter $ beziehst Du Dich also auf das Ausgangsobjekt:

                        5d936055-1ee8-4462-9d58-f45e560dbaf6-image.png

                        mit $.data selektierst Du nun das Array das Dich interessiert:

                        972a1709-2b89-4496-b044-ff12613d19db-image.png

                        mit #$i setzt Du eine Variable, das Dir den Index zu jedem Element enthält

                        1a7a0bfc-aa64-44fc-b6eb-fc52d5954d8e-image.png

                        Nachdem wir nun eine Variable $i haben - können wir die Elemente herausfiltern, die uns interessieren. Also alle deren Index >0 sind.

                        Einen Filter definiert man einfach in eckigen Klammern:
                        20abdf3d-fd55-4285-9222-0374eb6bd1de-image.png

                        6471818f-ec22-46a7-8940-abc5024e5dac-image.png

                        Nun haben wir also das erste Element bereits entfernt. Das Ergebnis wollen wir aber wieder, wie das Ausgangsobjekt in einem Objekt mit der Eigenschaft "data" habe. Also brauchen wir das nur drum rum zu schreiben bei JSONATA und das wars schon.

                        0fd7e29e-f308-497d-b859-1a6a34908963-image.png

                        Damit wurde die ganze Magie schon erklärt.

                        Wie gesagt, wie es ohne JSONATA gehen kann, habe ich hier kurz angerissen: https://forum.iobroker.net/post/1102736

                        Solange es aber bei den Puzzleteilchen kein Teil gibt mit dem man Objekte erzeugen kann, ist das hoffnungslos umständlich.

                        1 Reply Last reply Reply Quote 0
                        • M
                          ManfredHi last edited by

                          Vielen Dank @mickym werd das jetzt mal genauer studieren und probieren.

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

                            Hätte noch eine Frage zu den Schleifen: Immer wenn ich die Schleifen "wiederhole solange" oder "wiederhole bis" nehme, stürtzt die Javascript instanz ab.
                            Wie verwendet man diese Schleifen eigentlich richtig?

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            774
                            Online

                            31.9k
                            Users

                            80.2k
                            Topics

                            1.3m
                            Posts

                            3
                            12
                            356
                            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