Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Bestimmte Daten aus Json extrahieren

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bestimmte Daten aus Json extrahieren

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

      Ich habe ein Json Object wo ich gerne einen Teil extrahieren möchte und damit weiterarbeiten wollen würde.
      Json ist wie folgt aufgebaut:

      {"192.168.2.1":"XX:XX:XX:XXXX:XX; AVM Audiovisuelles Marketing und Computersysteme GmbH; fritz.box; www.fritz.box; myfritz.box; www.myfritz.box; fritz.nas; www.fritz.nas; fritz-nas.fritz.box; fritz-nas.box; wpad.box; wpad.fritz.box","192.168.2.2":"XX:XX:XX:XXXX:XX; ASUSTek COMPUTER INC.; Asus-W-Lan.fritz.box"}
      

      Ich würde mir da gerne alle Mac Adressen (XX:XX:XX:XXXX:XX) rausziehen.

      Weiß da einer weiter?

      R 1 Reply Last reply Reply Quote 0
      • Thisoft
        Thisoft last edited by

        Prinzipiell geht das per Javascript, per Blockly, per NodeRed und sehr wahrscheinlich auch mit dem Parser-Adapter.
        Womit könntest du dich denn am ehesten anfreunden? Bei Javascript und evtl. noch NodeRed könnte ich dir später mal ein Beispiel basteln. Die anderen Beiden sind nicht meine Baustelle...

        1 Reply Last reply Reply Quote 0
        • R
          rewenode @kmxak last edited by

          @kmxak Da du das unter Node-Red gepostest hast, geh ich davon aus, dass du das unter Node-Red lösen willst.
          Spontan fallen mir 2 Lösungen ein:

          1. function-node mit JS-String Funktionen.
          2. Ein change-node:
          [
              {
                  "id": "4edb422a.002f34",
                  "type": "inject",
                  "z": "1770f773.c5c8e1",
                  "name": "Dein Beispiel json",
                  "topic": "",
                  "payload": "{\"192.168.2.1\":\"XX:XX:XX:XXXX:XX; AVM Audiovisuelles Marketing und Computersysteme GmbH; fritz.box; www.fritz.box; myfritz.box; www.myfritz.box; fritz.nas; www.fritz.nas; fritz-nas.fritz.box; fritz-nas.box; wpad.box; wpad.fritz.box\",\"192.168.2.2\":\"XX:XX:XX:XXXX:XX; ASUSTek COMPUTER INC.; Asus-W-Lan.fritz.box\"}",
                  "payloadType": "json",
                  "repeat": "",
                  "crontab": "",
                  "once": false,
                  "onceDelay": 0.1,
                  "x": 190,
                  "y": 160,
                  "wires": [
                      [
                          "a503f6c3.b38ea8"
                      ]
                  ]
              },
              {
                  "id": "c9d744be.4b6e5",
                  "type": "debug",
                  "z": "1770f773.c5c8e1",
                  "name": "",
                  "active": true,
                  "tosidebar": true,
                  "console": false,
                  "tostatus": false,
                  "complete": "false",
                  "x": 590,
                  "y": 160,
                  "wires": []
              },
              {
                  "id": "a503f6c3.b38ea8",
                  "type": "change",
                  "z": "1770f773.c5c8e1",
                  "name": "extract MAC",
                  "rules": [
                      {
                          "t": "set",
                          "p": "payload",
                          "pt": "msg",
                          "to": "$map(payload.*, function($v) {$substringBefore($v, \";\")} )",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 390,
                  "y": 160,
                  "wires": [
                      [
                          "c9d744be.4b6e5"
                      ]
                  ]
              }
          ]
          
          liv-in-sky 1 Reply Last reply Reply Quote 0
          • kmxak
            kmxak Most Active last edited by

            moin, danke für die hilfen.

            den teil verstehe ich überhaupt nicht ist aber der teil der wahrscheinlich am wichtigsten ist.

            $map(payload.*, function($v) {$substringBefore($v, ";")} )
            

            Habe es nun aber mit deinem Beispiel ans laufen bekommen.
            Musste aber noch ein Json to Object dazwischen verwenden.

            👍

            R 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @rewenode last edited by

              @rewenode

              darf ich mal kurz was fragen: du benutzt jsonata - oder - deshalb auch die $-zeichen

              falls so etwas in js zu machen wäre, muss dann var jsonata = require("jsonata" im script stehen - danach funktioniert das auch in js ?
              in blockly müßte ich dann wahrscheinlich eine js-function einfügen ?

              bitte nicht genervt sein - bin noch am einarbeiten

              1 Reply Last reply Reply Quote 0
              • R
                rewenode @kmxak last edited by rewenode

                @kmxak sagte in Bestimmte Daten aus Json extrahieren:

                den teil verstehe ich überhaupt nicht ist aber der teil der wahrscheinlich am wichtigsten ist.

                Ja, das ist JSonata.
                Eine extrem mächtige Sprache, die bei dieser Aufgabe sicher nicht nötig ist. Allerdings haben die node-red Entwickler sie u.a. in den change-node integriert, weshalb ich sie hier verwende. Im change-node steht natives JavaScript nicht zur Verfügung, damit würde es genauso einfach gehen.

                @liv-in-sky sagte in Bestimmte Daten aus Json extrahieren:

                falls so etwas in js zu machen wäre, muss dann var jsonata = require("jsonata" im script stehen - danach funktioniert das auch in js ?

                In einem reinen JavaScript ja. Allerdings muss die Abfrage dann noch in einen String verpackt werden, also syntaktisch etwas komplizierter.
                Im node-red-function-node ist das auch möglich, allerdings nicht mit require("jsonata"). Jsonata muss da schon über die Settings.js eingebunden werden.
                (geht auch über Funktionen in RED aber das ist nicht offiziell dokumentiert)
                Eigentlich ist das aber unnötig, da JSonata komfortabel in wichtige core-nodes integriert ist.

                @liv-in-sky sagte in Bestimmte Daten aus Json extrahieren:

                bitte nicht genervt sein - bin noch am einarbeiten

                Genervt bin ich nur, wenn mein Rechner mal wieder ...;-)

                PS.

                @liv-in-sky sagte in Bestimmte Daten aus Json extrahieren:

                in blockly müßte ich dann wahrscheinlich eine js-function einfügen ?

                blocky habe ich noch nie verwendet, da weis sicher jemand Anders besser bescheid.

                1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky last edited by

                  @rewenode

                  danke dir für die erläuterung

                  ich weiß nicht warum, aber mit js werd ich einfach nicht warm. ich mache solche "umwandlungen" auch immer über node red - bin ganz froh dein beispiel gefunden zu haben, mal sehen, ob oder wie ich das in mein thema einbauen kann - da muss wohl noch geübt werden 😞

                  1 Reply Last reply Reply Quote 0
                  • R
                    rewenode last edited by

                    @liv-in-sky sagte in Bestimmte Daten aus Json extrahieren:

                    ich weiß nicht warum, aber mit js werd ich einfach nicht warm

                    Da ist node-red doch ein prima Einstieg. Da lernt sich JS fast nebenbei.

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

                      ist finde nodered extrem schwierig...

                      in blockly müsste man das auch easy einfügen können. ich kenne mich aber leider mit json umwandeln usw gar nicht aus.

                      R iomountain 2 Replies Last reply Reply Quote 0
                      • R
                        rewenode @kmxak last edited by

                        @kmxak sagte in Bestimmte Daten aus Json extrahieren:

                        in blockly müsste man das auch easy einfügen können.

                        wollte grad sagen: mach mal 😉

                        Früher gab es Peitschen zum geißeln. Der moderne Hobbyprogrammierer nimmt JSONata, REBOL oder Regex 😉

                        1 Reply Last reply Reply Quote 1
                        • iomountain
                          iomountain @kmxak last edited by

                          @kmxak sagte in Bestimmte Daten aus Json extrahieren:

                          in blockly müsste man das auch easy einfügen können.

                          Einen Baustein habe ich dafür noch nicht gefunden, hab Ihn mal auf die Wunschliste gepackt:
                          Wunschliste Blockly-Elemente

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

                            du musst da diesen block nehmen und den javascript händisch einfügen.

                            <block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="a~0sZz~Kq[gHY%LwB*2D" x="112.83273983001686" y="212.54544067382812">
                              <mutation statements="false"></mutation>
                              <field name="NAME">etwas tun</field>
                              <field name="SCRIPT"></field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                            </block>
                            
                            1 Reply Last reply Reply Quote 1
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            953
                            Online

                            31.7k
                            Users

                            79.7k
                            Topics

                            1.3m
                            Posts

                            node-red
                            5
                            12
                            2764
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo