Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. einen json String filtern und Bereiche löschen.

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    478

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    616

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

einen json String filtern und Bereiche löschen.

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
17 Beiträge 6 Kommentatoren 978 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S stenmic

    Hallo, ich brauch mal Hilfe.
    Finde hierzu leider nichts was mir mit meinen wenigen Kentnissen hilft.

    Ich habe in einem Datenpunkt einen String, den ich FIltern und in einen neuen Datenpunkt schreiben möchte.

    Hier ein beispielhafter Json:

    [
    	{
    		"id": "1",
    		"name": "Name 1",
    		"status": "ok",
    	},
    	{
    		"id": "2",
    		"name": "Name 2",
    		"status": "nok",
    	},
    	{
    		"id": "3",
    		"name": "Name 3",
    		"status": "ok",
    	}
    	....
    ]
    

    Nun möchte ich den "status" prüfen und überall wo "nok" (kann öffters vorkommen) steht, sollen die ganzen Blöcke aus dem String entfernt und dieser neu in einem anderen Datenpunkt gespeichert werden.

    2024-08-03 08 28 00.jpg

    Kann mir da jemand helfen (blockly oder js)

    haus-automatisierungH Online
    haus-automatisierungH Online
    haus-automatisierung
    Developer Most Active
    schrieb am zuletzt editiert von haus-automatisierung
    #7

    @stenmic sagte in einen json String filtern und Bereiche löschen.:

    Nun möchte ich den "status" prüfen und überall wo "nok" (kann öffters vorkommen) steht, sollen die ganzen Blöcke aus dem String entfernt und dieser neu in einem anderen Datenpunkt gespeichert werden.

    z.B.

    const list = JSON.parse(getState('0_userdata.0.blabla1').val);
    const listOk = list.filter(r => r.status === 'ok');
    setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
    

    Das vereinfach das Beispiel von @paul53 etwas:

    // IDs eintragen!
    const idSrc = '';
    const idDst = '';
     
    function filter(json) {
        const arrSrc = JSON.parse(json);
        const arrDst = arrSrc.filter(r => r.status === 'ok');
        setState(idDst, JSON.stringify(arrDst), true);
    }
    
    filter(getState(idSrc).val);
    on(idSrc, (dp) => filter(dp.state.val));
    

    🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
    🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
    📚 Meine inoffizielle ioBroker Dokumentation

    bahnuhrB S 3 Antworten Letzte Antwort
    1
    • haus-automatisierungH haus-automatisierung

      @stenmic sagte in einen json String filtern und Bereiche löschen.:

      Nun möchte ich den "status" prüfen und überall wo "nok" (kann öffters vorkommen) steht, sollen die ganzen Blöcke aus dem String entfernt und dieser neu in einem anderen Datenpunkt gespeichert werden.

      z.B.

      const list = JSON.parse(getState('0_userdata.0.blabla1').val);
      const listOk = list.filter(r => r.status === 'ok');
      setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
      

      Das vereinfach das Beispiel von @paul53 etwas:

      // IDs eintragen!
      const idSrc = '';
      const idDst = '';
       
      function filter(json) {
          const arrSrc = JSON.parse(json);
          const arrDst = arrSrc.filter(r => r.status === 'ok');
          setState(idDst, JSON.stringify(arrDst), true);
      }
      
      filter(getState(idSrc).val);
      on(idSrc, (dp) => filter(dp.state.val));
      
      bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #8

      @haus-automatisierung
      cool,
      ist das mit dem "filter" irgendwo beschrieben ?


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      haus-automatisierungH 1 Antwort Letzte Antwort
      0
      • bahnuhrB bahnuhr

        @haus-automatisierung
        cool,
        ist das mit dem "filter" irgendwo beschrieben ?

        haus-automatisierungH Online
        haus-automatisierungH Online
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von
        #9

        @bahnuhr sagte in einen json String filtern und Bereiche löschen.:

        ist das mit dem "filter" irgendwo beschrieben ?

        Klar, ist ja Standard-JavaScript (in diesem Fall mit einer Arrow-Function):

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
        📚 Meine inoffizielle ioBroker Dokumentation

        1 Antwort Letzte Antwort
        0
        • haus-automatisierungH haus-automatisierung

          @stenmic sagte in einen json String filtern und Bereiche löschen.:

          Nun möchte ich den "status" prüfen und überall wo "nok" (kann öffters vorkommen) steht, sollen die ganzen Blöcke aus dem String entfernt und dieser neu in einem anderen Datenpunkt gespeichert werden.

          z.B.

          const list = JSON.parse(getState('0_userdata.0.blabla1').val);
          const listOk = list.filter(r => r.status === 'ok');
          setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
          

          Das vereinfach das Beispiel von @paul53 etwas:

          // IDs eintragen!
          const idSrc = '';
          const idDst = '';
           
          function filter(json) {
              const arrSrc = JSON.parse(json);
              const arrDst = arrSrc.filter(r => r.status === 'ok');
              setState(idDst, JSON.stringify(arrDst), true);
          }
          
          filter(getState(idSrc).val);
          on(idSrc, (dp) => filter(dp.state.val));
          
          bahnuhrB Online
          bahnuhrB Online
          bahnuhr
          Forum Testing Most Active
          schrieb am zuletzt editiert von bahnuhr
          #10

          @haus-automatisierung
          Kann in deinem Beispiel on triggern?

          weil idSrc ist ja ""

          edit:
          Frage ist Unsinn, denn es steht ja extra dabei ID eintragen.
          Hatte ich überlesen.

          mfg


          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
          Danke.
          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
          ScreenToGif :https://www.screentogif.com/downloads.html

          haus-automatisierungH 1 Antwort Letzte Antwort
          0
          • bahnuhrB bahnuhr

            @haus-automatisierung
            Kann in deinem Beispiel on triggern?

            weil idSrc ist ja ""

            edit:
            Frage ist Unsinn, denn es steht ja extra dabei ID eintragen.
            Hatte ich überlesen.

            mfg

            haus-automatisierungH Online
            haus-automatisierungH Online
            haus-automatisierung
            Developer Most Active
            schrieb am zuletzt editiert von
            #11

            @bahnuhr Daher wohl der Kommentar darüber. Der TO hat die IDs seiner Darenpunkte nicht genannt

            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
            📚 Meine inoffizielle ioBroker Dokumentation

            S 1 Antwort Letzte Antwort
            0
            • haus-automatisierungH haus-automatisierung

              @bahnuhr Daher wohl der Kommentar darüber. Der TO hat die IDs seiner Darenpunkte nicht genannt

              S Offline
              S Offline
              stenmic
              schrieb am zuletzt editiert von
              #12

              danke für alle Lösungen :+1:

              1 Antwort Letzte Antwort
              0
              • haus-automatisierungH haus-automatisierung

                @stenmic sagte in einen json String filtern und Bereiche löschen.:

                Nun möchte ich den "status" prüfen und überall wo "nok" (kann öffters vorkommen) steht, sollen die ganzen Blöcke aus dem String entfernt und dieser neu in einem anderen Datenpunkt gespeichert werden.

                z.B.

                const list = JSON.parse(getState('0_userdata.0.blabla1').val);
                const listOk = list.filter(r => r.status === 'ok');
                setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
                

                Das vereinfach das Beispiel von @paul53 etwas:

                // IDs eintragen!
                const idSrc = '';
                const idDst = '';
                 
                function filter(json) {
                    const arrSrc = JSON.parse(json);
                    const arrDst = arrSrc.filter(r => r.status === 'ok');
                    setState(idDst, JSON.stringify(arrDst), true);
                }
                
                filter(getState(idSrc).val);
                on(idSrc, (dp) => filter(dp.state.val));
                
                S Offline
                S Offline
                stenmic
                schrieb am zuletzt editiert von stenmic
                #13

                @haus-automatisierung

                bin gerade unterwegs und kann es noch nicht testen.
                Ich muss nach nok suchen und diese Blöcke sollen gelöscht werden.
                Eure Beispiele suchen nach ok und behalten diese.
                „ok“ kann bei mir leider auch anderes heißen.
                passt das dann so?

                
                const list = JSON.parse(getState('0_userdata.0.blabla1').val);
                const listOk = list.filter(r => r.status !== 'nok');
                setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
                
                
                
                haus-automatisierungH 1 Antwort Letzte Antwort
                0
                • S stenmic

                  @haus-automatisierung

                  bin gerade unterwegs und kann es noch nicht testen.
                  Ich muss nach nok suchen und diese Blöcke sollen gelöscht werden.
                  Eure Beispiele suchen nach ok und behalten diese.
                  „ok“ kann bei mir leider auch anderes heißen.
                  passt das dann so?

                  
                  const list = JSON.parse(getState('0_userdata.0.blabla1').val);
                  const listOk = list.filter(r => r.status !== 'nok');
                  setState('0_userdata.0.blabla2', JSON.stringify(listOk), true);
                  
                  
                  
                  haus-automatisierungH Online
                  haus-automatisierungH Online
                  haus-automatisierung
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #14

                  @stenmic Ja

                  🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                  🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                  📚 Meine inoffizielle ioBroker Dokumentation

                  1 Antwort Letzte Antwort
                  1
                  • mickymM mickym

                    Wieder mal ein Beispiel, wie einfach das mit JSONATA ging, aber man sich lieber mit Schleifen und einer Menge Code das Leben schwer macht. man muss es halt nur anders formulieren und sagen, man will alle Objekte haben, die ok sind.

                    S Offline
                    S Offline
                    stenmic
                    schrieb am zuletzt editiert von
                    #15

                    @mickym sagte in einen json String filtern und Bereiche löschen.:

                    Wieder mal ein Beispiel, wie einfach das mit JSONATA ging, aber man sich lieber mit Schleifen und einer Menge Code das Leben schwer macht. man muss es halt nur anders formulieren und sagen, man will alle Objekte haben, die ok sind.

                    @mickym also ich find jetzt den 3 Zeiler von @haus-automatisierung nicht schlimm.
                    (wenn man die JavaScript-docs im Schlaf aufzählen kann, ist alles voll einfach :grin: )

                    mickymM 1 Antwort Letzte Antwort
                    0
                    • S stenmic

                      @mickym sagte in einen json String filtern und Bereiche löschen.:

                      Wieder mal ein Beispiel, wie einfach das mit JSONATA ging, aber man sich lieber mit Schleifen und einer Menge Code das Leben schwer macht. man muss es halt nur anders formulieren und sagen, man will alle Objekte haben, die ok sind.

                      @mickym also ich find jetzt den 3 Zeiler von @haus-automatisierung nicht schlimm.
                      (wenn man die JavaScript-docs im Schlaf aufzählen kann, ist alles voll einfach :grin: )

                      mickymM Online
                      mickymM Online
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von mickym
                      #16

                      @stenmic Na anhand deines Beispiels nur der Vollständigkeit die JSONATA Lösung:

                      setState('0_userdata.0.Test.JSON_target',JSON.stringify(await jsonataExpression(JSON.parse(getState('0_userdata.0.Test.JSON_source').val),'$[status != "nok"]')), true);
                      

                      letztlich reduziert sich die ganze Logik auf diesen Ausdruck:

                      $[status != "nok"]
                      

                      Hier die Blockly-Version
                      3da59a81-6524-42e5-a206-737606595240-image.png

                      Ausgewählte Blöcke exportieren
                      <xml xmlns="https://developers.google.com/blockly/xml">
                       <block type="update" id="U7XhnINUb5BA~asv%U~}" x="-212" y="-59">
                         <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                         <field name="OID">0_userdata.0.Test.JSON_target</field>
                         <field name="WITH_DELAY">FALSE</field>
                         <value name="VALUE">
                           <block type="convert_object2json" id="Tj:1;;d?[z*VGJ{GIpjS">
                             <field name="PRETTIFY">FALSE</field>
                             <value name="VALUE">
                               <block type="convert_jsonata" id="HaZqIt}bK{;7W#.?zsDH">
                                 <value name="EXPRESSION">
                                   <shadow type="text" id="B@rj1Ji@!vB*`.70=3NZ">
                                     <field name="TEXT">$[status != "nok"]</field>
                                   </shadow>
                                 </value>
                                 <value name="TARGET">
                                   <block type="get_value" id="~Bo-)1$QbquS^t1bK~ph">
                                     <field name="ATTR">val</field>
                                     <field name="OID">0_userdata.0.Test.JSON_source</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                           </block>
                         </value>
                       </block>
                      </xml>
                      

                      https://try.jsonata.org/47UBND9kh

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      S 1 Antwort Letzte Antwort
                      0
                      • mickymM mickym

                        @stenmic Na anhand deines Beispiels nur der Vollständigkeit die JSONATA Lösung:

                        setState('0_userdata.0.Test.JSON_target',JSON.stringify(await jsonataExpression(JSON.parse(getState('0_userdata.0.Test.JSON_source').val),'$[status != "nok"]')), true);
                        

                        letztlich reduziert sich die ganze Logik auf diesen Ausdruck:

                        $[status != "nok"]
                        

                        Hier die Blockly-Version
                        3da59a81-6524-42e5-a206-737606595240-image.png

                        Ausgewählte Blöcke exportieren
                        <xml xmlns="https://developers.google.com/blockly/xml">
                         <block type="update" id="U7XhnINUb5BA~asv%U~}" x="-212" y="-59">
                           <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                           <field name="OID">0_userdata.0.Test.JSON_target</field>
                           <field name="WITH_DELAY">FALSE</field>
                           <value name="VALUE">
                             <block type="convert_object2json" id="Tj:1;;d?[z*VGJ{GIpjS">
                               <field name="PRETTIFY">FALSE</field>
                               <value name="VALUE">
                                 <block type="convert_jsonata" id="HaZqIt}bK{;7W#.?zsDH">
                                   <value name="EXPRESSION">
                                     <shadow type="text" id="B@rj1Ji@!vB*`.70=3NZ">
                                       <field name="TEXT">$[status != "nok"]</field>
                                     </shadow>
                                   </value>
                                   <value name="TARGET">
                                     <block type="get_value" id="~Bo-)1$QbquS^t1bK~ph">
                                       <field name="ATTR">val</field>
                                       <field name="OID">0_userdata.0.Test.JSON_source</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </value>
                         </block>
                        </xml>
                        

                        https://try.jsonata.org/47UBND9kh

                        S Offline
                        S Offline
                        stenmic
                        schrieb am zuletzt editiert von
                        #17

                        @mickym gebe zu... auch geil!

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        864

                        Online

                        32.6k

                        Benutzer

                        81.9k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe