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. Blockly
  5. [gelöst] JSON Array - bestimmte Postion suchen, wegschreiben

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.4k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[gelöst] JSON Array - bestimmte Postion suchen, wegschreiben

Geplant Angeheftet Gesperrt Verschoben Blockly
12 Beiträge 3 Kommentatoren 997 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.
  • metaxaM Offline
    metaxaM Offline
    metaxa
    schrieb am zuletzt editiert von metaxa
    #1

    Liebe Alle!

    Bin schon seit Tagen dabei mein AT-Sprit Script in JS auf Blockly umzubauen, damit ich es auch verstehen kann. Das Auslesen aller Werte und in verschiedene DP klappt schon hervorragend.

    Jetzt möchte ich aber einen bestimmten "Favoriten" (Tankstelle in der Nähe) an Hand seiner ID auslesen.

    Ich suche die Einträge direkt unterhalb von "id": 1469126

    [
      {
        "id": 33395,
        "name": "SOCAR Perchtoldsdorf",
        "location": {
          "address": "Ketzergasse 191a",
          "postalCode": "2380",
          "city": "Perchtoldsdorf",
          "latitude": 48.1301731,
          "longitude": 16.2919418
        },
        "position": 1,
        "open": true,
        "distance": 4.24828720258133,
        "prices": [
          {
            "fuelType": "DIE",
            "amount": 1.594,
            "label": "Diesel"
          }
        ]
      },
      {
        "id": 1354794,
        "name": "JET TANKSTELLE",
        "location": {
          "address": "KETZERGASSE 208",
          "postalCode": "1230",
          "city": "WIEN",
          "latitude": 48.130709,
          "longitude": 16.289516
        },
        "position": 2,
        "open": true,
        "distance": 4.05966413625612,
        "prices": [
          {
            "fuelType": "DIE",
            "amount": 1.599,
            "label": "Diesel"
          }
        ]
      },
      {
        "id": 1474215,
        "name": "eni",
        "location": {
          "address": "Breitenfurter Strasse 325-327",
          "postalCode": "1230",
          "city": "Wien",
          "latitude": 48.14312,
          "longitude": 16.29248
        },
        "position": 3,
        "open": true,
        "distance": 4.23361278931133,
        "prices": [
          {
            "fuelType": "DIE",
            "amount": 1.599,
            "label": "Diesel"
          }
        ]
      },
      {
        "id": 33381,
        "name": "SOCAR Wien-Endresstraße",
        "location": {
          "address": "Endresstraße 69",
          "postalCode": "1230",
          "city": "Wien",
          "latitude": 48.1486138,
          "longitude": 16.2777595
        },
        "position": 4,
        "open": true,
        "distance": 3.3172022008027,
        "prices": [
          {
            "fuelType": "DIE",
            "amount": 1.604,
            "label": "Diesel"
          }
        ]
      },
      {
        "id": 7812,
        "name": "Vivod GmbH",
        "location": {
          "address": "Laaberstrasse 1",
          "postalCode": "2384",
          "city": "Breitenfurt",
          "latitude": 48.1381917,
          "longitude": 16.2038779
        },
        "position": 5,
        "open": true,
        "distance": 2.38587672764222,
        "prices": [
          {
            "fuelType": "DIE",
            "amount": 1.605,
            "label": "Diesel"
          }
        ]
      },
      {
        "id": 1469126,
        "name": "Turmöl Quick",
        "location": {
          "address": "Breitenfurterstraße 473",
          "postalCode": "1230",
          "city": "Wien",
          "latitude": 48.137832,
          "longitude": 16.257546
        },
        "position": 6,
        "open": true,
        "distance": 1.60125999656503,
        "prices": []
      },
      {
        "id": 1469826,
        "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",
        "location": {
          "address": "Hauptstraße 74",
          "postalCode": "2384",
          "city": "Breitenfurt",
          "latitude": 48.1356658,
          "longitude": 16.194081
        },
        "position": 7,
        "open": true,
        "distance": 3.12510014775095,
        "prices": []
      },
      {
        "id": 247819,
        "name": "eni",
        "location": {
          "address": "Feldstrasse 44",
          "postalCode": "2345",
          "city": "Brunn/Geb.",
          "latitude": 48.122997,
          "longitude": 16.293216
        },
        "position": 8,
        "open": true,
        "distance": 4.5702171129758,
        "prices": []
      },
      {
        "id": 423,
        "name": "OMV - Perchtoldsdorf Brunner Gasse 48",
        "location": {
          "address": "Brunner Gasse 48",
          "postalCode": "2380",
          "city": "Perchtoldsdorf",
          "latitude": 48.11554,
          "longitude": 16.27169
        },
        "position": 9,
        "open": true,
        "distance": 3.64945938739222,
        "prices": []
      },
      {
        "id": 1354893,
        "name": "OMV - Wien Speisinger Straße 228",
        "location": {
          "address": "Speisinger Strasse 228",
          "postalCode": "1232",
          "city": "Wien",
          "latitude": 48.15489,
          "longitude": 16.2711
        },
        "position": 10,
        "open": true,
        "distance": 3.21047303986457,
        "prices": []
      }
    ]
    

    Wie kann ich die unabhängig der Array Reihenfolge (die ändert sich laufend) immer den richtigen Block finden und als "Favorit" auslesen.

    Im seinerzeitig abgekupferte Script sah das so aus:

     /// console.log((String('Start eine Tankstelle finden')));
        createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", 0,{type: 'string', name: 'Preis', read: true, write: true});
        createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", 0,{type: 'string', name: 'Name', read: true, write: true});
        createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", 0,{type: 'string', name: 'Adresse', read: true, write: true});
        createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", 0,{type: 'boolean', name: 'Offen', read: true, write: true});
        setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", "kein Preis verfügbar");
        for (index = 0; index < gasStation.length; index++)
        {
            if (gasStation[index].id == 1469126) {    //Turmoil, Willergasse
    
                if ((gasStation[index].prices[0])!=undefined){
                    setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", (gasStation[index].prices[0].amount).toString().replace(".",","));
                };
    
                setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", gasStation[index].name);
                setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", gasStation[index].location.postalCode + " " + gasStation[index].location.city + ", " + gasStation[index].location.address);
                setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", gasStation[index].open);
            }
        }
        /// console.log((String('Ende eine Tankstelle finden')));
    

    Wie setze ich das am Besten mit Blockly um?

    Lieben Dank!

    W mickymM 2 Antworten Letzte Antwort
    0
    • metaxaM metaxa

      Liebe Alle!

      Bin schon seit Tagen dabei mein AT-Sprit Script in JS auf Blockly umzubauen, damit ich es auch verstehen kann. Das Auslesen aller Werte und in verschiedene DP klappt schon hervorragend.

      Jetzt möchte ich aber einen bestimmten "Favoriten" (Tankstelle in der Nähe) an Hand seiner ID auslesen.

      Ich suche die Einträge direkt unterhalb von "id": 1469126

      [
        {
          "id": 33395,
          "name": "SOCAR Perchtoldsdorf",
          "location": {
            "address": "Ketzergasse 191a",
            "postalCode": "2380",
            "city": "Perchtoldsdorf",
            "latitude": 48.1301731,
            "longitude": 16.2919418
          },
          "position": 1,
          "open": true,
          "distance": 4.24828720258133,
          "prices": [
            {
              "fuelType": "DIE",
              "amount": 1.594,
              "label": "Diesel"
            }
          ]
        },
        {
          "id": 1354794,
          "name": "JET TANKSTELLE",
          "location": {
            "address": "KETZERGASSE 208",
            "postalCode": "1230",
            "city": "WIEN",
            "latitude": 48.130709,
            "longitude": 16.289516
          },
          "position": 2,
          "open": true,
          "distance": 4.05966413625612,
          "prices": [
            {
              "fuelType": "DIE",
              "amount": 1.599,
              "label": "Diesel"
            }
          ]
        },
        {
          "id": 1474215,
          "name": "eni",
          "location": {
            "address": "Breitenfurter Strasse 325-327",
            "postalCode": "1230",
            "city": "Wien",
            "latitude": 48.14312,
            "longitude": 16.29248
          },
          "position": 3,
          "open": true,
          "distance": 4.23361278931133,
          "prices": [
            {
              "fuelType": "DIE",
              "amount": 1.599,
              "label": "Diesel"
            }
          ]
        },
        {
          "id": 33381,
          "name": "SOCAR Wien-Endresstraße",
          "location": {
            "address": "Endresstraße 69",
            "postalCode": "1230",
            "city": "Wien",
            "latitude": 48.1486138,
            "longitude": 16.2777595
          },
          "position": 4,
          "open": true,
          "distance": 3.3172022008027,
          "prices": [
            {
              "fuelType": "DIE",
              "amount": 1.604,
              "label": "Diesel"
            }
          ]
        },
        {
          "id": 7812,
          "name": "Vivod GmbH",
          "location": {
            "address": "Laaberstrasse 1",
            "postalCode": "2384",
            "city": "Breitenfurt",
            "latitude": 48.1381917,
            "longitude": 16.2038779
          },
          "position": 5,
          "open": true,
          "distance": 2.38587672764222,
          "prices": [
            {
              "fuelType": "DIE",
              "amount": 1.605,
              "label": "Diesel"
            }
          ]
        },
        {
          "id": 1469126,
          "name": "Turmöl Quick",
          "location": {
            "address": "Breitenfurterstraße 473",
            "postalCode": "1230",
            "city": "Wien",
            "latitude": 48.137832,
            "longitude": 16.257546
          },
          "position": 6,
          "open": true,
          "distance": 1.60125999656503,
          "prices": []
        },
        {
          "id": 1469826,
          "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",
          "location": {
            "address": "Hauptstraße 74",
            "postalCode": "2384",
            "city": "Breitenfurt",
            "latitude": 48.1356658,
            "longitude": 16.194081
          },
          "position": 7,
          "open": true,
          "distance": 3.12510014775095,
          "prices": []
        },
        {
          "id": 247819,
          "name": "eni",
          "location": {
            "address": "Feldstrasse 44",
            "postalCode": "2345",
            "city": "Brunn/Geb.",
            "latitude": 48.122997,
            "longitude": 16.293216
          },
          "position": 8,
          "open": true,
          "distance": 4.5702171129758,
          "prices": []
        },
        {
          "id": 423,
          "name": "OMV - Perchtoldsdorf Brunner Gasse 48",
          "location": {
            "address": "Brunner Gasse 48",
            "postalCode": "2380",
            "city": "Perchtoldsdorf",
            "latitude": 48.11554,
            "longitude": 16.27169
          },
          "position": 9,
          "open": true,
          "distance": 3.64945938739222,
          "prices": []
        },
        {
          "id": 1354893,
          "name": "OMV - Wien Speisinger Straße 228",
          "location": {
            "address": "Speisinger Strasse 228",
            "postalCode": "1232",
            "city": "Wien",
            "latitude": 48.15489,
            "longitude": 16.2711
          },
          "position": 10,
          "open": true,
          "distance": 3.21047303986457,
          "prices": []
        }
      ]
      

      Wie kann ich die unabhängig der Array Reihenfolge (die ändert sich laufend) immer den richtigen Block finden und als "Favorit" auslesen.

      Im seinerzeitig abgekupferte Script sah das so aus:

       /// console.log((String('Start eine Tankstelle finden')));
          createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", 0,{type: 'string', name: 'Preis', read: true, write: true});
          createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", 0,{type: 'string', name: 'Name', read: true, write: true});
          createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", 0,{type: 'string', name: 'Adresse', read: true, write: true});
          createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", 0,{type: 'boolean', name: 'Offen', read: true, write: true});
          setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", "kein Preis verfügbar");
          for (index = 0; index < gasStation.length; index++)
          {
              if (gasStation[index].id == 1469126) {    //Turmoil, Willergasse
      
                  if ((gasStation[index].prices[0])!=undefined){
                      setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", (gasStation[index].prices[0].amount).toString().replace(".",","));
                  };
      
                  setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", gasStation[index].name);
                  setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", gasStation[index].location.postalCode + " " + gasStation[index].location.city + ", " + gasStation[index].location.address);
                  setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", gasStation[index].open);
              }
          }
          /// console.log((String('Ende eine Tankstelle finden')));
      

      Wie setze ich das am Besten mit Blockly um?

      Lieben Dank!

      W Online
      W Online
      wolfi913
      schrieb am zuletzt editiert von wolfi913
      #2

      @metaxa
      Eine ganz, ganz, ganz grobe Idee
      Screenshot 2024-05-30 001726.png
      Screenshot 2024-05-30 001753.png
      wie's evtl. funktionieren könnte.
      Hab eine andere ID verwendet, da in Deinem JSON für den "Favoriten" keine Preise drin sind.

      mickymM 1 Antwort Letzte Antwort
      1
      • metaxaM metaxa

        Liebe Alle!

        Bin schon seit Tagen dabei mein AT-Sprit Script in JS auf Blockly umzubauen, damit ich es auch verstehen kann. Das Auslesen aller Werte und in verschiedene DP klappt schon hervorragend.

        Jetzt möchte ich aber einen bestimmten "Favoriten" (Tankstelle in der Nähe) an Hand seiner ID auslesen.

        Ich suche die Einträge direkt unterhalb von "id": 1469126

        [
          {
            "id": 33395,
            "name": "SOCAR Perchtoldsdorf",
            "location": {
              "address": "Ketzergasse 191a",
              "postalCode": "2380",
              "city": "Perchtoldsdorf",
              "latitude": 48.1301731,
              "longitude": 16.2919418
            },
            "position": 1,
            "open": true,
            "distance": 4.24828720258133,
            "prices": [
              {
                "fuelType": "DIE",
                "amount": 1.594,
                "label": "Diesel"
              }
            ]
          },
          {
            "id": 1354794,
            "name": "JET TANKSTELLE",
            "location": {
              "address": "KETZERGASSE 208",
              "postalCode": "1230",
              "city": "WIEN",
              "latitude": 48.130709,
              "longitude": 16.289516
            },
            "position": 2,
            "open": true,
            "distance": 4.05966413625612,
            "prices": [
              {
                "fuelType": "DIE",
                "amount": 1.599,
                "label": "Diesel"
              }
            ]
          },
          {
            "id": 1474215,
            "name": "eni",
            "location": {
              "address": "Breitenfurter Strasse 325-327",
              "postalCode": "1230",
              "city": "Wien",
              "latitude": 48.14312,
              "longitude": 16.29248
            },
            "position": 3,
            "open": true,
            "distance": 4.23361278931133,
            "prices": [
              {
                "fuelType": "DIE",
                "amount": 1.599,
                "label": "Diesel"
              }
            ]
          },
          {
            "id": 33381,
            "name": "SOCAR Wien-Endresstraße",
            "location": {
              "address": "Endresstraße 69",
              "postalCode": "1230",
              "city": "Wien",
              "latitude": 48.1486138,
              "longitude": 16.2777595
            },
            "position": 4,
            "open": true,
            "distance": 3.3172022008027,
            "prices": [
              {
                "fuelType": "DIE",
                "amount": 1.604,
                "label": "Diesel"
              }
            ]
          },
          {
            "id": 7812,
            "name": "Vivod GmbH",
            "location": {
              "address": "Laaberstrasse 1",
              "postalCode": "2384",
              "city": "Breitenfurt",
              "latitude": 48.1381917,
              "longitude": 16.2038779
            },
            "position": 5,
            "open": true,
            "distance": 2.38587672764222,
            "prices": [
              {
                "fuelType": "DIE",
                "amount": 1.605,
                "label": "Diesel"
              }
            ]
          },
          {
            "id": 1469126,
            "name": "Turmöl Quick",
            "location": {
              "address": "Breitenfurterstraße 473",
              "postalCode": "1230",
              "city": "Wien",
              "latitude": 48.137832,
              "longitude": 16.257546
            },
            "position": 6,
            "open": true,
            "distance": 1.60125999656503,
            "prices": []
          },
          {
            "id": 1469826,
            "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",
            "location": {
              "address": "Hauptstraße 74",
              "postalCode": "2384",
              "city": "Breitenfurt",
              "latitude": 48.1356658,
              "longitude": 16.194081
            },
            "position": 7,
            "open": true,
            "distance": 3.12510014775095,
            "prices": []
          },
          {
            "id": 247819,
            "name": "eni",
            "location": {
              "address": "Feldstrasse 44",
              "postalCode": "2345",
              "city": "Brunn/Geb.",
              "latitude": 48.122997,
              "longitude": 16.293216
            },
            "position": 8,
            "open": true,
            "distance": 4.5702171129758,
            "prices": []
          },
          {
            "id": 423,
            "name": "OMV - Perchtoldsdorf Brunner Gasse 48",
            "location": {
              "address": "Brunner Gasse 48",
              "postalCode": "2380",
              "city": "Perchtoldsdorf",
              "latitude": 48.11554,
              "longitude": 16.27169
            },
            "position": 9,
            "open": true,
            "distance": 3.64945938739222,
            "prices": []
          },
          {
            "id": 1354893,
            "name": "OMV - Wien Speisinger Straße 228",
            "location": {
              "address": "Speisinger Strasse 228",
              "postalCode": "1232",
              "city": "Wien",
              "latitude": 48.15489,
              "longitude": 16.2711
            },
            "position": 10,
            "open": true,
            "distance": 3.21047303986457,
            "prices": []
          }
        ]
        

        Wie kann ich die unabhängig der Array Reihenfolge (die ändert sich laufend) immer den richtigen Block finden und als "Favorit" auslesen.

        Im seinerzeitig abgekupferte Script sah das so aus:

         /// console.log((String('Start eine Tankstelle finden')));
            createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", 0,{type: 'string', name: 'Preis', read: true, write: true});
            createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", 0,{type: 'string', name: 'Name', read: true, write: true});
            createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", 0,{type: 'string', name: 'Adresse', read: true, write: true});
            createState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", 0,{type: 'boolean', name: 'Offen', read: true, write: true});
            setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", "kein Preis verfügbar");
            for (index = 0; index < gasStation.length; index++)
            {
                if (gasStation[index].id == 1469126) {    //Turmoil, Willergasse
        
                    if ((gasStation[index].prices[0])!=undefined){
                        setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Preis", (gasStation[index].prices[0].amount).toString().replace(".",","));
                    };
        
                    setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Name", gasStation[index].name);
                    setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Adresse", gasStation[index].location.postalCode + " " + gasStation[index].location.city + ", " + gasStation[index].location.address);
                    setState("javascript.0.scriptDatenPunkte.Sprit_AT.Favorit.Offen", gasStation[index].open);
                }
            }
            /// console.log((String('Ende eine Tankstelle finden')));
        

        Wie setze ich das am Besten mit Blockly um?

        Lieben Dank!

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        @metaxa Warum nutzt Du nicht JSONATA - das kann man auch von Blockly nutzen und ist dafür prädestiniert.

        Ich zeigs Dir für die ID 1469126.

        8eed8bfc-9a7d-4d52-bb24-17e970f1c135-image.png

        Egal wo im Array dein Objekt mit der ID 1469126 steht, JSONATA sucht es Dir vollautomatisch raus.

        Hier zum Import:

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable id="C]`hwL_$4@h]bbM-$sKy">Array</variable>
           <variable id="E]]-le/@X.u|Gw18SCsA">Objekt</variable>
         </variables>
         <block type="variables_set" id=":Mgn|Tq+.Ic0%u#8p~l6" x="-812" y="-337">
           <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
           <value name="VALUE">
             <block type="convert_json2object" id="gWL*+4-S9[.|Kum,j2+M">
               <value name="VALUE">
                 <block type="text" id="q=j2};B1h:OaYcwEWol[">
                   <field name="TEXT">[   {     "id": 33395,     "name": "SOCAR Perchtoldsdorf",     "location": {       "address": "Ketzergasse 191a",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.1301731,       "longitude": 16.2919418     },     "position": 1,     "open": true,     "distance": 4.24828720258133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.594,         "label": "Diesel"       }     ]   },   {     "id": 1354794,     "name": "JET TANKSTELLE",     "location": {       "address": "KETZERGASSE 208",       "postalCode": "1230",       "city": "WIEN",       "latitude": 48.130709,       "longitude": 16.289516     },     "position": 2,     "open": true,     "distance": 4.05966413625612,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 1474215,     "name": "eni",     "location": {       "address": "Breitenfurter Strasse 325-327",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.14312,       "longitude": 16.29248     },     "position": 3,     "open": true,     "distance": 4.23361278931133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 33381,     "name": "SOCAR Wien-Endresstraße",     "location": {       "address": "Endresstraße 69",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.1486138,       "longitude": 16.2777595     },     "position": 4,     "open": true,     "distance": 3.3172022008027,     "prices": [       {         "fuelType": "DIE",         "amount": 1.604,         "label": "Diesel"       }     ]   },   {     "id": 7812,     "name": "Vivod GmbH",     "location": {       "address": "Laaberstrasse 1",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1381917,       "longitude": 16.2038779     },     "position": 5,     "open": true,     "distance": 2.38587672764222,     "prices": [       {         "fuelType": "DIE",         "amount": 1.605,         "label": "Diesel"       }     ]   },   {     "id": 1469126,     "name": "Turmöl Quick",     "location": {       "address": "Breitenfurterstraße 473",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.137832,       "longitude": 16.257546     },     "position": 6,     "open": true,     "distance": 1.60125999656503,     "prices": []   },   {     "id": 1469826,     "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",     "location": {       "address": "Hauptstraße 74",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1356658,       "longitude": 16.194081     },     "position": 7,     "open": true,     "distance": 3.12510014775095,     "prices": []   },   {     "id": 247819,     "name": "eni",     "location": {       "address": "Feldstrasse 44",       "postalCode": "2345",       "city": "Brunn/Geb.",       "latitude": 48.122997,       "longitude": 16.293216     },     "position": 8,     "open": true,     "distance": 4.5702171129758,     "prices": []   },   {     "id": 423,     "name": "OMV - Perchtoldsdorf Brunner Gasse 48",     "location": {       "address": "Brunner Gasse 48",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.11554,       "longitude": 16.27169     },     "position": 9,     "open": true,     "distance": 3.64945938739222,     "prices": []   },   {     "id": 1354893,     "name": "OMV - Wien Speisinger Straße 228",     "location": {       "address": "Speisinger Strasse 228",       "postalCode": "1232",       "city": "Wien",       "latitude": 48.15489,       "longitude": 16.2711     },     "position": 10,     "open": true,     "distance": 3.21047303986457,     "prices": []   } ]</field>
                 </block>
               </value>
             </block>
           </value>
           <next>
             <block type="debug" id="PNhgCYv`uPV3$qkXi.Oc">
               <field name="Severity">info</field>
               <value name="TEXT">
                 <shadow type="text" id="$*]d-KFUly!TD}P!;XUq">
                   <field name="TEXT">test</field>
                 </shadow>
                 <block type="variables_get" id="xji}A|so2*-+`J3YmJPh">
                   <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                 </block>
               </value>
               <next>
                 <block type="comment" id="Ir9s;/#2(Fu1tkL-%=B{">
                   <field name="COMMENT">Selektiere Objekt mit ID 1469126</field>
                   <next>
                     <block type="variables_set" id="gC4IBZ(?v5{Qxs3I%?l,">
                       <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                       <value name="VALUE">
                         <block type="convert_jsonata" id="31)u7n9@qy/,XukH)tI^">
                           <value name="EXPRESSION">
                             <shadow type="text" id="eo!FXd7Rs/gL|ll1YC4K">
                               <field name="TEXT">$[id=1469126]</field>
                             </shadow>
                           </value>
                           <value name="TARGET">
                             <block type="variables_get" id="B)l9{K4?,fe)zUJ%8Wq-">
                               <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="*CLIHqoyjB6O.Ngihp[t">
                           <field name="Severity">info</field>
                           <value name="TEXT">
                             <shadow type="text" id="sbugv}vAp$I-nUy}1zq3">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="variables_get" id="BVwOH{o;)^AlGe~t:m#K">
                               <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                             </block>
                           </value>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
           </next>
         </block>
        </xml>
        

        Ist total simpel der JSONATA Ausdruck:

        $[id=1469126]
        

        In Folge kannst Du nun auf alle Attribute des Objektes zugreifen. 10 mal effizienter als jeder Javascriptcode. Schau mal wie kurz das ist. Da braucht man keine Schleifen und nichts.

        Auf die Attribute des Objektes kannst Du herkömlich zugreifen.

        8b01dc0e-fc91-4ef5-b05a-6571a73b3b7a-image.png

        So hier nochmal das gesamte Blockly:

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable id="C]`hwL_$4@h]bbM-$sKy">Array</variable>
           <variable id="E]]-le/@X.u|Gw18SCsA">Objekt</variable>
         </variables>
         <block type="variables_set" id=":Mgn|Tq+.Ic0%u#8p~l6" x="-837" y="-412">
           <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
           <value name="VALUE">
             <block type="convert_json2object" id="gWL*+4-S9[.|Kum,j2+M">
               <value name="VALUE">
                 <block type="text" id="q=j2};B1h:OaYcwEWol[">
                   <field name="TEXT">[   {     "id": 33395,     "name": "SOCAR Perchtoldsdorf",     "location": {       "address": "Ketzergasse 191a",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.1301731,       "longitude": 16.2919418     },     "position": 1,     "open": true,     "distance": 4.24828720258133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.594,         "label": "Diesel"       }     ]   },   {     "id": 1354794,     "name": "JET TANKSTELLE",     "location": {       "address": "KETZERGASSE 208",       "postalCode": "1230",       "city": "WIEN",       "latitude": 48.130709,       "longitude": 16.289516     },     "position": 2,     "open": true,     "distance": 4.05966413625612,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 1474215,     "name": "eni",     "location": {       "address": "Breitenfurter Strasse 325-327",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.14312,       "longitude": 16.29248     },     "position": 3,     "open": true,     "distance": 4.23361278931133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 33381,     "name": "SOCAR Wien-Endresstraße",     "location": {       "address": "Endresstraße 69",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.1486138,       "longitude": 16.2777595     },     "position": 4,     "open": true,     "distance": 3.3172022008027,     "prices": [       {         "fuelType": "DIE",         "amount": 1.604,         "label": "Diesel"       }     ]   },   {     "id": 7812,     "name": "Vivod GmbH",     "location": {       "address": "Laaberstrasse 1",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1381917,       "longitude": 16.2038779     },     "position": 5,     "open": true,     "distance": 2.38587672764222,     "prices": [       {         "fuelType": "DIE",         "amount": 1.605,         "label": "Diesel"       }     ]   },   {     "id": 1469126,     "name": "Turmöl Quick",     "location": {       "address": "Breitenfurterstraße 473",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.137832,       "longitude": 16.257546     },     "position": 6,     "open": true,     "distance": 1.60125999656503,     "prices": []   },   {     "id": 1469826,     "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",     "location": {       "address": "Hauptstraße 74",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1356658,       "longitude": 16.194081     },     "position": 7,     "open": true,     "distance": 3.12510014775095,     "prices": []   },   {     "id": 247819,     "name": "eni",     "location": {       "address": "Feldstrasse 44",       "postalCode": "2345",       "city": "Brunn/Geb.",       "latitude": 48.122997,       "longitude": 16.293216     },     "position": 8,     "open": true,     "distance": 4.5702171129758,     "prices": []   },   {     "id": 423,     "name": "OMV - Perchtoldsdorf Brunner Gasse 48",     "location": {       "address": "Brunner Gasse 48",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.11554,       "longitude": 16.27169     },     "position": 9,     "open": true,     "distance": 3.64945938739222,     "prices": []   },   {     "id": 1354893,     "name": "OMV - Wien Speisinger Straße 228",     "location": {       "address": "Speisinger Strasse 228",       "postalCode": "1232",       "city": "Wien",       "latitude": 48.15489,       "longitude": 16.2711     },     "position": 10,     "open": true,     "distance": 3.21047303986457,     "prices": []   } ]</field>
                 </block>
               </value>
             </block>
           </value>
           <next>
             <block type="debug" id="PNhgCYv`uPV3$qkXi.Oc">
               <field name="Severity">info</field>
               <value name="TEXT">
                 <shadow type="text" id="$*]d-KFUly!TD}P!;XUq">
                   <field name="TEXT">test</field>
                 </shadow>
                 <block type="variables_get" id="xji}A|so2*-+`J3YmJPh">
                   <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                 </block>
               </value>
               <next>
                 <block type="comment" id="Ir9s;/#2(Fu1tkL-%=B{">
                   <field name="COMMENT">Selektiere Objekt mit ID 1469126</field>
                   <next>
                     <block type="variables_set" id="gC4IBZ(?v5{Qxs3I%?l,">
                       <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                       <value name="VALUE">
                         <block type="convert_jsonata" id="31)u7n9@qy/,XukH)tI^">
                           <value name="EXPRESSION">
                             <shadow type="text" id="eo!FXd7Rs/gL|ll1YC4K">
                               <field name="TEXT">$[id=1469126]</field>
                             </shadow>
                           </value>
                           <value name="TARGET">
                             <block type="variables_get" id="B)l9{K4?,fe)zUJ%8Wq-">
                               <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="*CLIHqoyjB6O.Ngihp[t">
                           <field name="Severity">info</field>
                           <value name="TEXT">
                             <shadow type="text" id="sbugv}vAp$I-nUy}1zq3">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="variables_get" id="BVwOH{o;)^AlGe~t:m#K">
                               <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="vS#1`AjEPYfKGmS;BqhB">
                               <field name="Severity">info</field>
                               <value name="TEXT">
                                 <shadow type="text" id="X3/I._9n}*P{R+Qf.2Ch">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="text_join" id="o=v;%=UIXpr8Iv2$eOLI">
                                   <mutation items="2"></mutation>
                                   <value name="ADD0">
                                     <block type="text" id="c?z4eg}aW+l*AWw8}irr">
                                       <field name="TEXT">Name: </field>
                                     </block>
                                   </value>
                                   <value name="ADD1">
                                     <block type="get_attr" id="`gpPMpQk0mBvf@{fHbLp">
                                       <value name="PATH">
                                         <shadow type="text" id="sdxe)XGOh6ciBH^9QoH+">
                                           <field name="TEXT">name</field>
                                         </shadow>
                                       </value>
                                       <value name="OBJECT">
                                         <shadow type="get_object" id="MZok=C5Evy(VKxx*1w[I">
                                           <field name="OID">Object ID</field>
                                         </shadow>
                                         <block type="variables_get" id="MWre,7zXJ`XJP8YTYix[">
                                           <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                               <next>
                                 <block type="debug" id="5C1x{?R;@F*C,Kq66c^p">
                                   <field name="Severity">info</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="X3/I._9n}*P{R+Qf.2Ch">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="text_join" id="1eD0x}yL_~Nf|@K4A!o8">
                                       <mutation items="2"></mutation>
                                       <value name="ADD0">
                                         <block type="text" id="-6zq7w-JcZIojdg(l:z8">
                                           <field name="TEXT">Adresse: </field>
                                         </block>
                                       </value>
                                       <value name="ADD1">
                                         <block type="get_attr" id="5pfEZjU;s03P;3v$k!wW">
                                           <value name="PATH">
                                             <shadow type="text" id="}%1EYk8E$dr%[A%3}9QZ">
                                               <field name="TEXT">location.address</field>
                                             </shadow>
                                           </value>
                                           <value name="OBJECT">
                                             <shadow type="get_object" id="MZok=C5Evy(VKxx*1w[I">
                                               <field name="OID">Object ID</field>
                                             </shadow>
                                             <block type="variables_get" id="jvN6_i7^e,n(=70=u[)(">
                                               <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
           </next>
         </block>
        </xml>
        

        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.

        W 1 Antwort Letzte Antwort
        2
        • W wolfi913

          @metaxa
          Eine ganz, ganz, ganz grobe Idee
          Screenshot 2024-05-30 001726.png
          Screenshot 2024-05-30 001753.png
          wie's evtl. funktionieren könnte.
          Hab eine andere ID verwendet, da in Deinem JSON für den "Favoriten" keine Preise drin sind.

          mickymM Offline
          mickymM Offline
          mickym
          Most Active
          schrieb am zuletzt editiert von mickym
          #4

          @wolfi913 sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

          @metaxa
          Eine ganz, ganz, ganz grobe Idee
          Screenshot 2024-05-30 001726.png
          Screenshot 2024-05-30 001753.png
          wie's evtl. funktionieren könnte.
          Hab eine andere ID verwendet, da in Deinem JSON für den "Favoriten" keine Preise drin sind.

          Auch für dieses Beispiel sind ja die Preise in einem Array - hier zwar nur ein Preis. Aber auch hier kann man die Filterfunktion von JSONATA direkt verwenden:

          ce5a45f8-c905-45d9-8224-3122c19bb233-image.png

          In dem Preisarray wird also direkt das Element aus den Preisen, automatisch das Element selektiert mit dem label "Diesel" und aus diesem Segment gleich der Preis mit der Eigenschaft amount selektiert.

          $.prices[label="Diesel"].amount
          

          Also kann die Filterfunktion nicht nur auf top-Ebene, sondern auch auf jedes Array innerhalb eines Objektes angewandt werden.

          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.

          1 Antwort Letzte Antwort
          2
          • mickymM mickym

            @metaxa Warum nutzt Du nicht JSONATA - das kann man auch von Blockly nutzen und ist dafür prädestiniert.

            Ich zeigs Dir für die ID 1469126.

            8eed8bfc-9a7d-4d52-bb24-17e970f1c135-image.png

            Egal wo im Array dein Objekt mit der ID 1469126 steht, JSONATA sucht es Dir vollautomatisch raus.

            Hier zum Import:

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable id="C]`hwL_$4@h]bbM-$sKy">Array</variable>
               <variable id="E]]-le/@X.u|Gw18SCsA">Objekt</variable>
             </variables>
             <block type="variables_set" id=":Mgn|Tq+.Ic0%u#8p~l6" x="-812" y="-337">
               <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
               <value name="VALUE">
                 <block type="convert_json2object" id="gWL*+4-S9[.|Kum,j2+M">
                   <value name="VALUE">
                     <block type="text" id="q=j2};B1h:OaYcwEWol[">
                       <field name="TEXT">[   {     "id": 33395,     "name": "SOCAR Perchtoldsdorf",     "location": {       "address": "Ketzergasse 191a",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.1301731,       "longitude": 16.2919418     },     "position": 1,     "open": true,     "distance": 4.24828720258133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.594,         "label": "Diesel"       }     ]   },   {     "id": 1354794,     "name": "JET TANKSTELLE",     "location": {       "address": "KETZERGASSE 208",       "postalCode": "1230",       "city": "WIEN",       "latitude": 48.130709,       "longitude": 16.289516     },     "position": 2,     "open": true,     "distance": 4.05966413625612,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 1474215,     "name": "eni",     "location": {       "address": "Breitenfurter Strasse 325-327",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.14312,       "longitude": 16.29248     },     "position": 3,     "open": true,     "distance": 4.23361278931133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 33381,     "name": "SOCAR Wien-Endresstraße",     "location": {       "address": "Endresstraße 69",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.1486138,       "longitude": 16.2777595     },     "position": 4,     "open": true,     "distance": 3.3172022008027,     "prices": [       {         "fuelType": "DIE",         "amount": 1.604,         "label": "Diesel"       }     ]   },   {     "id": 7812,     "name": "Vivod GmbH",     "location": {       "address": "Laaberstrasse 1",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1381917,       "longitude": 16.2038779     },     "position": 5,     "open": true,     "distance": 2.38587672764222,     "prices": [       {         "fuelType": "DIE",         "amount": 1.605,         "label": "Diesel"       }     ]   },   {     "id": 1469126,     "name": "Turmöl Quick",     "location": {       "address": "Breitenfurterstraße 473",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.137832,       "longitude": 16.257546     },     "position": 6,     "open": true,     "distance": 1.60125999656503,     "prices": []   },   {     "id": 1469826,     "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",     "location": {       "address": "Hauptstraße 74",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1356658,       "longitude": 16.194081     },     "position": 7,     "open": true,     "distance": 3.12510014775095,     "prices": []   },   {     "id": 247819,     "name": "eni",     "location": {       "address": "Feldstrasse 44",       "postalCode": "2345",       "city": "Brunn/Geb.",       "latitude": 48.122997,       "longitude": 16.293216     },     "position": 8,     "open": true,     "distance": 4.5702171129758,     "prices": []   },   {     "id": 423,     "name": "OMV - Perchtoldsdorf Brunner Gasse 48",     "location": {       "address": "Brunner Gasse 48",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.11554,       "longitude": 16.27169     },     "position": 9,     "open": true,     "distance": 3.64945938739222,     "prices": []   },   {     "id": 1354893,     "name": "OMV - Wien Speisinger Straße 228",     "location": {       "address": "Speisinger Strasse 228",       "postalCode": "1232",       "city": "Wien",       "latitude": 48.15489,       "longitude": 16.2711     },     "position": 10,     "open": true,     "distance": 3.21047303986457,     "prices": []   } ]</field>
                     </block>
                   </value>
                 </block>
               </value>
               <next>
                 <block type="debug" id="PNhgCYv`uPV3$qkXi.Oc">
                   <field name="Severity">info</field>
                   <value name="TEXT">
                     <shadow type="text" id="$*]d-KFUly!TD}P!;XUq">
                       <field name="TEXT">test</field>
                     </shadow>
                     <block type="variables_get" id="xji}A|so2*-+`J3YmJPh">
                       <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                     </block>
                   </value>
                   <next>
                     <block type="comment" id="Ir9s;/#2(Fu1tkL-%=B{">
                       <field name="COMMENT">Selektiere Objekt mit ID 1469126</field>
                       <next>
                         <block type="variables_set" id="gC4IBZ(?v5{Qxs3I%?l,">
                           <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                           <value name="VALUE">
                             <block type="convert_jsonata" id="31)u7n9@qy/,XukH)tI^">
                               <value name="EXPRESSION">
                                 <shadow type="text" id="eo!FXd7Rs/gL|ll1YC4K">
                                   <field name="TEXT">$[id=1469126]</field>
                                 </shadow>
                               </value>
                               <value name="TARGET">
                                 <block type="variables_get" id="B)l9{K4?,fe)zUJ%8Wq-">
                                   <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                                 </block>
                               </value>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="*CLIHqoyjB6O.Ngihp[t">
                               <field name="Severity">info</field>
                               <value name="TEXT">
                                 <shadow type="text" id="sbugv}vAp$I-nUy}1zq3">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="variables_get" id="BVwOH{o;)^AlGe~t:m#K">
                                   <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
            </xml>
            

            Ist total simpel der JSONATA Ausdruck:

            $[id=1469126]
            

            In Folge kannst Du nun auf alle Attribute des Objektes zugreifen. 10 mal effizienter als jeder Javascriptcode. Schau mal wie kurz das ist. Da braucht man keine Schleifen und nichts.

            Auf die Attribute des Objektes kannst Du herkömlich zugreifen.

            8b01dc0e-fc91-4ef5-b05a-6571a73b3b7a-image.png

            So hier nochmal das gesamte Blockly:

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable id="C]`hwL_$4@h]bbM-$sKy">Array</variable>
               <variable id="E]]-le/@X.u|Gw18SCsA">Objekt</variable>
             </variables>
             <block type="variables_set" id=":Mgn|Tq+.Ic0%u#8p~l6" x="-837" y="-412">
               <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
               <value name="VALUE">
                 <block type="convert_json2object" id="gWL*+4-S9[.|Kum,j2+M">
                   <value name="VALUE">
                     <block type="text" id="q=j2};B1h:OaYcwEWol[">
                       <field name="TEXT">[   {     "id": 33395,     "name": "SOCAR Perchtoldsdorf",     "location": {       "address": "Ketzergasse 191a",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.1301731,       "longitude": 16.2919418     },     "position": 1,     "open": true,     "distance": 4.24828720258133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.594,         "label": "Diesel"       }     ]   },   {     "id": 1354794,     "name": "JET TANKSTELLE",     "location": {       "address": "KETZERGASSE 208",       "postalCode": "1230",       "city": "WIEN",       "latitude": 48.130709,       "longitude": 16.289516     },     "position": 2,     "open": true,     "distance": 4.05966413625612,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 1474215,     "name": "eni",     "location": {       "address": "Breitenfurter Strasse 325-327",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.14312,       "longitude": 16.29248     },     "position": 3,     "open": true,     "distance": 4.23361278931133,     "prices": [       {         "fuelType": "DIE",         "amount": 1.599,         "label": "Diesel"       }     ]   },   {     "id": 33381,     "name": "SOCAR Wien-Endresstraße",     "location": {       "address": "Endresstraße 69",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.1486138,       "longitude": 16.2777595     },     "position": 4,     "open": true,     "distance": 3.3172022008027,     "prices": [       {         "fuelType": "DIE",         "amount": 1.604,         "label": "Diesel"       }     ]   },   {     "id": 7812,     "name": "Vivod GmbH",     "location": {       "address": "Laaberstrasse 1",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1381917,       "longitude": 16.2038779     },     "position": 5,     "open": true,     "distance": 2.38587672764222,     "prices": [       {         "fuelType": "DIE",         "amount": 1.605,         "label": "Diesel"       }     ]   },   {     "id": 1469126,     "name": "Turmöl Quick",     "location": {       "address": "Breitenfurterstraße 473",       "postalCode": "1230",       "city": "Wien",       "latitude": 48.137832,       "longitude": 16.257546     },     "position": 6,     "open": true,     "distance": 1.60125999656503,     "prices": []   },   {     "id": 1469826,     "name": "AVIA XPress (SB-Carwash, SB-Sauger, Wasser gratis) ",     "location": {       "address": "Hauptstraße 74",       "postalCode": "2384",       "city": "Breitenfurt",       "latitude": 48.1356658,       "longitude": 16.194081     },     "position": 7,     "open": true,     "distance": 3.12510014775095,     "prices": []   },   {     "id": 247819,     "name": "eni",     "location": {       "address": "Feldstrasse 44",       "postalCode": "2345",       "city": "Brunn/Geb.",       "latitude": 48.122997,       "longitude": 16.293216     },     "position": 8,     "open": true,     "distance": 4.5702171129758,     "prices": []   },   {     "id": 423,     "name": "OMV - Perchtoldsdorf Brunner Gasse 48",     "location": {       "address": "Brunner Gasse 48",       "postalCode": "2380",       "city": "Perchtoldsdorf",       "latitude": 48.11554,       "longitude": 16.27169     },     "position": 9,     "open": true,     "distance": 3.64945938739222,     "prices": []   },   {     "id": 1354893,     "name": "OMV - Wien Speisinger Straße 228",     "location": {       "address": "Speisinger Strasse 228",       "postalCode": "1232",       "city": "Wien",       "latitude": 48.15489,       "longitude": 16.2711     },     "position": 10,     "open": true,     "distance": 3.21047303986457,     "prices": []   } ]</field>
                     </block>
                   </value>
                 </block>
               </value>
               <next>
                 <block type="debug" id="PNhgCYv`uPV3$qkXi.Oc">
                   <field name="Severity">info</field>
                   <value name="TEXT">
                     <shadow type="text" id="$*]d-KFUly!TD}P!;XUq">
                       <field name="TEXT">test</field>
                     </shadow>
                     <block type="variables_get" id="xji}A|so2*-+`J3YmJPh">
                       <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                     </block>
                   </value>
                   <next>
                     <block type="comment" id="Ir9s;/#2(Fu1tkL-%=B{">
                       <field name="COMMENT">Selektiere Objekt mit ID 1469126</field>
                       <next>
                         <block type="variables_set" id="gC4IBZ(?v5{Qxs3I%?l,">
                           <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                           <value name="VALUE">
                             <block type="convert_jsonata" id="31)u7n9@qy/,XukH)tI^">
                               <value name="EXPRESSION">
                                 <shadow type="text" id="eo!FXd7Rs/gL|ll1YC4K">
                                   <field name="TEXT">$[id=1469126]</field>
                                 </shadow>
                               </value>
                               <value name="TARGET">
                                 <block type="variables_get" id="B)l9{K4?,fe)zUJ%8Wq-">
                                   <field name="VAR" id="C]`hwL_$4@h]bbM-$sKy">Array</field>
                                 </block>
                               </value>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="*CLIHqoyjB6O.Ngihp[t">
                               <field name="Severity">info</field>
                               <value name="TEXT">
                                 <shadow type="text" id="sbugv}vAp$I-nUy}1zq3">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="variables_get" id="BVwOH{o;)^AlGe~t:m#K">
                                   <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                 </block>
                               </value>
                               <next>
                                 <block type="debug" id="vS#1`AjEPYfKGmS;BqhB">
                                   <field name="Severity">info</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="X3/I._9n}*P{R+Qf.2Ch">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="text_join" id="o=v;%=UIXpr8Iv2$eOLI">
                                       <mutation items="2"></mutation>
                                       <value name="ADD0">
                                         <block type="text" id="c?z4eg}aW+l*AWw8}irr">
                                           <field name="TEXT">Name: </field>
                                         </block>
                                       </value>
                                       <value name="ADD1">
                                         <block type="get_attr" id="`gpPMpQk0mBvf@{fHbLp">
                                           <value name="PATH">
                                             <shadow type="text" id="sdxe)XGOh6ciBH^9QoH+">
                                               <field name="TEXT">name</field>
                                             </shadow>
                                           </value>
                                           <value name="OBJECT">
                                             <shadow type="get_object" id="MZok=C5Evy(VKxx*1w[I">
                                               <field name="OID">Object ID</field>
                                             </shadow>
                                             <block type="variables_get" id="MWre,7zXJ`XJP8YTYix[">
                                               <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="debug" id="5C1x{?R;@F*C,Kq66c^p">
                                       <field name="Severity">info</field>
                                       <value name="TEXT">
                                         <shadow type="text" id="X3/I._9n}*P{R+Qf.2Ch">
                                           <field name="TEXT">test</field>
                                         </shadow>
                                         <block type="text_join" id="1eD0x}yL_~Nf|@K4A!o8">
                                           <mutation items="2"></mutation>
                                           <value name="ADD0">
                                             <block type="text" id="-6zq7w-JcZIojdg(l:z8">
                                               <field name="TEXT">Adresse: </field>
                                             </block>
                                           </value>
                                           <value name="ADD1">
                                             <block type="get_attr" id="5pfEZjU;s03P;3v$k!wW">
                                               <value name="PATH">
                                                 <shadow type="text" id="}%1EYk8E$dr%[A%3}9QZ">
                                                   <field name="TEXT">location.address</field>
                                                 </shadow>
                                               </value>
                                               <value name="OBJECT">
                                                 <shadow type="get_object" id="MZok=C5Evy(VKxx*1w[I">
                                                   <field name="OID">Object ID</field>
                                                 </shadow>
                                                 <block type="variables_get" id="jvN6_i7^e,n(=70=u[)(">
                                                   <field name="VAR" id="E]]-le/@X.u|Gw18SCsA">Objekt</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
            </xml>
            

            W Online
            W Online
            wolfi913
            schrieb am zuletzt editiert von wolfi913
            #5

            @mickym
            Coole Variante, ohne großes Brimorium :blush:
            Hätte nur ne kurze Ergänzung :innocent:
            Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert). Da sollte m.M.n. JSONata Ausdruck verwendet werden.
            Und falls sich der Favorit mal ändert könnte es evtl. gleich mit einer Variable in den JSONataAusdruck übergeben werden und die evtl. aus einem Datenpunkt befüllt werden.
            Screenshot 2024-05-30 021521.png

            Edit: Sorry, hab Deine Ergänzung zu spät gesehen

            mickymM 3 Antworten Letzte Antwort
            0
            • W wolfi913

              @mickym
              Coole Variante, ohne großes Brimorium :blush:
              Hätte nur ne kurze Ergänzung :innocent:
              Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert). Da sollte m.M.n. JSONata Ausdruck verwendet werden.
              Und falls sich der Favorit mal ändert könnte es evtl. gleich mit einer Variable in den JSONataAusdruck übergeben werden und die evtl. aus einem Datenpunkt befüllt werden.
              Screenshot 2024-05-30 021521.png

              Edit: Sorry, hab Deine Ergänzung zu spät gesehen

              mickymM Offline
              mickymM Offline
              mickym
              Most Active
              schrieb am zuletzt editiert von
              #6

              @wolfi913 Na ich hab Dir ja die JSONATA Version gegeben. Das Attribut von Objekt prices alleine geht nicht, da das ein Array ist. Ich hab ja gerade gezeigt, wenn man mehrere Preise im Array hat, wie man nach dem Label das richtige Element selektiert.

              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.

              1 Antwort Letzte Antwort
              0
              • W wolfi913

                @mickym
                Coole Variante, ohne großes Brimorium :blush:
                Hätte nur ne kurze Ergänzung :innocent:
                Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert). Da sollte m.M.n. JSONata Ausdruck verwendet werden.
                Und falls sich der Favorit mal ändert könnte es evtl. gleich mit einer Variable in den JSONataAusdruck übergeben werden und die evtl. aus einem Datenpunkt befüllt werden.
                Screenshot 2024-05-30 021521.png

                Edit: Sorry, hab Deine Ergänzung zu spät gesehen

                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                schrieb am zuletzt editiert von
                #7

                @wolfi913 sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                Edit: Sorry, hab Deine Ergänzung zu spät gesehen

                Der Vorteil mit JSONATA das Preisarray zu durchsuchen ist, dass man so gleich über das Label aus dem Preisarray, das richtige Objekt selektieren kann. Leider ist in der Quelle das nicht enthalten. Aber ich zeigs mal in dem ich einfach noch einen Fakepreis dazu mache, um das zu verdeutlichen. Hier mal Super aus 2 Preisen selektiert

                92421116-3afd-4d4f-bac2-1d018d5bdb10-image.png

                $.prices[label="Super"].amount
                

                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.

                1 Antwort Letzte Antwort
                0
                • W wolfi913

                  @mickym
                  Coole Variante, ohne großes Brimorium :blush:
                  Hätte nur ne kurze Ergänzung :innocent:
                  Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert). Da sollte m.M.n. JSONata Ausdruck verwendet werden.
                  Und falls sich der Favorit mal ändert könnte es evtl. gleich mit einer Variable in den JSONataAusdruck übergeben werden und die evtl. aus einem Datenpunkt befüllt werden.
                  Screenshot 2024-05-30 021521.png

                  Edit: Sorry, hab Deine Ergänzung zu spät gesehen

                  mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #8

                  @wolfi913 sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                  Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert).

                  Man kann grundsätzlich natürlich auch auf die Eigenschaften der Objekte direkt mit JSONATA zugreifen.

                  Also statt Attribut "name" von Objekt, könnte man auch mit JSONATA und dem Objekt schreiben:

                  $.name
                  

                  0f54aa5b-2f26-41fe-b21b-c1e6e9a17114-image.png

                  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.

                  W metaxaM 2 Antworten Letzte Antwort
                  0
                  • mickymM mickym

                    @wolfi913 sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                    Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert).

                    Man kann grundsätzlich natürlich auch auf die Eigenschaften der Objekte direkt mit JSONATA zugreifen.

                    Also statt Attribut "name" von Objekt, könnte man auch mit JSONATA und dem Objekt schreiben:

                    $.name
                    

                    0f54aa5b-2f26-41fe-b21b-c1e6e9a17114-image.png

                    W Online
                    W Online
                    wolfi913
                    schrieb am zuletzt editiert von wolfi913
                    #9

                    @mickym sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                    Man kann grundsätzlich natürlich auch auf die Eigenschaften der Objekte direkt mit JSONATA zugreifen.

                    Also statt Attribut "name" von Objekt, könnte man auch mit JSONATA und dem Objekt schreiben

                    Hatte ich in meinem "Schleifen-"Beispiel für @metaxa ja auch so gemacht. Ich versuch bei mir ohnehin immer beim JSONata-Baustein zu bleiben. Aber prinzipiell funktionieren bei dem Aufbau des gelieferten JSON für diesen Wert ja beide Bausteine; das JSON ist an der Stelle ja noch nicht verschachtelt.

                    1 Antwort Letzte Antwort
                    1
                    • mickymM mickym

                      @wolfi913 sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                      Bei den Werten unter prices funktioniert Attribut von Objekt nicht (da wird "undefined" zurückgeliefert).

                      Man kann grundsätzlich natürlich auch auf die Eigenschaften der Objekte direkt mit JSONATA zugreifen.

                      Also statt Attribut "name" von Objekt, könnte man auch mit JSONATA und dem Objekt schreiben:

                      $.name
                      

                      0f54aa5b-2f26-41fe-b21b-c1e6e9a17114-image.png

                      metaxaM Offline
                      metaxaM Offline
                      metaxa
                      schrieb am zuletzt editiert von
                      #10

                      @mickym @wolfi913

                      WOW!!! Danke Euch beiden! Jetzt weiß ich, womit ich mich heute im Laufe des Tages beschäftigen werde.

                      JSONata --> kannte ich überhaupt nicht, gefällt mir sehr gut --> https://youtu.be/ZBaK40rtIBM?feature=shared

                      Ich darf mich für Rückfragen hier melden.

                      mickymM 1 Antwort Letzte Antwort
                      1
                      • metaxaM metaxa

                        @mickym @wolfi913

                        WOW!!! Danke Euch beiden! Jetzt weiß ich, womit ich mich heute im Laufe des Tages beschäftigen werde.

                        JSONata --> kannte ich überhaupt nicht, gefällt mir sehr gut --> https://youtu.be/ZBaK40rtIBM?feature=shared

                        Ich darf mich für Rückfragen hier melden.

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #11

                        @metaxa sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                        @mickym @wolfi913

                        WOW!!! Danke Euch beiden! Jetzt weiß ich, womit ich mich heute im Laufe des Tages beschäftigen werde.

                        JSONata --> kannte ich überhaupt nicht, gefällt mir sehr gut --> https://youtu.be/ZBaK40rtIBM?feature=shared

                        Ich darf mich für Rückfragen hier melden.

                        Ist am Anfang nicht immer ganz einfach, aber wenn man es mal verstanden hat, spart man sich unzählige Zeilen an Code.

                        Hier übrigens die Seite zur Originialdokumentation: https://docs.jsonata.org/overview

                        Und das allerbeste um es zu Lernen - öffne über try den Exerciser, da kann man die Ergebnisse sofort sehen.

                        d9250d46-f098-4c61-94cb-8d9d51518a3d-image.png

                        Links kannst Du Deine Quelle - also Dein Objekt reinkopieren. Rechts oben Deinen Code und hast gleich im Fenster rechts unten das Ergebnis.

                        Hier mal ein Link mit Deinen Daten: https://try.jsonata.org/Q8_LE3emZ

                        Damit siehst Du auf Anhieb die Ergebnisse Deines Codes im Fenster rechts oben.

                        Das ganze sind quasi "vorhersagebare Abfragen": https://docs.jsonata.org/predicate (kannst du auch anhand des Beispiels dort sehen und beruht auf der Filterung in einem Array von Objekten, nach beliebigen Eigenschaften der Objekte).

                        ce870c95-561d-49e2-a0ec-83bab83d4823-image.png

                        Wenn Du dann etwas fortgeschrittener bist, dann kannst Du Dir so mit einer Zeile immer die günstigste Tankstelle raussuchen mit allen Angaben, die Du benötigst:
                        https://try.jsonata.org/KNRfYUkvs

                        eee49375-a00e-4078-87be-4766ed02e901-image.png

                        Das Schöne ist, dass Du nun einfach die Preise verändern kannst in Deiner Quelle links, um zu sehen, ob das richtige Objekt selektiert wird. Wenn es mehrere gibt, dann erhälst Du automatisch ein Array.

                        $.prices[amount=$min($$.prices[fuelType="DIE"].amount)].%
                        

                        Und wenn Du Dir nur die Adresse aus dem obigen Beispiel ausgeben lassen willst, dann hängst Du das einfach an, an das Objekt bzw. erstellst Dir komplett neue Objekte.

                        https://try.jsonata.org/fKAASenDQ

                        aada67f2-46bd-4bcf-a340-95596e6df9e2-image.png

                        Das erstellt Dir völlig neue Objekte mit der günstigsten Tankstelle bzgl. Diesel und gibt Dir als Objekt den Preis und die Adresse in aufbereiteter Form wieder.

                        $.prices[amount=$min($$.prices[fuelType="DIE"].amount)].%.{"name":name,
                        "ort":location.postalCode & ' ' & location.city,
                        "strasse": location.address,
                        "dieselpreis" : prices[fuelType='DIE'].amount & ' €'}
                        

                        Wenn 2 Tankstellen die günstigsten sind (ich hab einfach den Preis von der JET verändert), dann bekommst Du automatisch ein Array mit beiden Tankstellen

                        d67d9276-5312-42a7-a061-f918b29a3824-image.png

                        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.

                        1 Antwort Letzte Antwort
                        2
                        • metaxaM Offline
                          metaxaM Offline
                          metaxa
                          schrieb am zuletzt editiert von
                          #12

                          @mickym sagte in JSON Array - bestimmte Postion suchen und wegschreiben:

                          Ist am Anfang nicht immer ganz einfach

                          Hier noch einmal - wenn auch verspätet - ein grosses DANKE für deine detaillierten Erklärungen. Sie haben sehr viel Licht in meinen Fragentunnel gebracht :bulb:

                          Ich habe mir final eine Mischung von herkömlichen und JOSNata Befehlen gebastelt, die ich hoffentlich noch in paar Monaten nachvollziehen kann. Geht auch sicher deutlich kürzer, aber für mich ist es gut so.

                          4277231e-2d79-42d1-8a9f-7ea02fca34c2-image.png

                          528f0b95-dc53-4e98-aa35-eaa24562802b-image.png

                          a0c8a32d-4150-4910-a09e-15d12785627c-image.png

                          @mickym DANKE!

                          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

                          507

                          Online

                          32.7k

                          Benutzer

                          82.4k

                          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