Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON Liste sortieren (Funktion)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON Liste sortieren (Funktion)

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @ThomKast last edited by

      @thomkast

      ich denke, du erzeugst kein array in einem array sondern ein array, welches aus strings (z.b. "[9.87,"06.01.2024",0,1]") besteht

      daher kann die sort funktion immer nur "[" mit "[" vergleichen - beim Wert 1 - im string ist der erste (0te) Wert "["

      daher funktioniert zwar noch das kürzen des arrays - aber eben nicht die sortierung nach dem ersten Wert im "inneren" array

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

        @thomkast

        siehe mal hier - kannste importieren

        aaScriptSort.txt

        1 Reply Last reply Reply Quote 0
        • T
          ThomKast last edited by ThomKast

          Hi und vielen Dank für Deine Antwort 👍 .

          @liv-in-sky sagte in JSON Liste sortieren (Funktion):

          @thomkast
          ich denke, du erzeugst kein array in einem array sondern ein array, welches aus strings (z.b. "[9.87,"06.01.2024",0,1]") besteht

          Das hatte ich schon fast vermutet, da dies der einzige Unterschied zum anderen Script war. Allerdings weiß ich nicht, wie ich einen korrekten JSON Aufbau erzeugen könnte.
          Denn es wäre nötig die JSON-Struktur der "inneren" 4 zusammenhängenden Werte aufrecht zu erhalten. Denn alle 4 Werte gehören zu einer Stunde, auf die ich später adressieren möchte.

          Dein Script funz't natürlich, wobei ich überhaupt nicht kapiere was "oPushList / ListOfFour" macht. Und "SortedArray" ebenfalls... 🤷‍♂️ . Hättest Du einen Link, mit dem ich mich dazu mal einlesen kann. Ich stehe da gerade echt wie der Ochs vor'm Berg.

          Ist es unverschämt, wenn ich frage, ob Du noch einen Lösungsansatz mit korrektem, bzw für die Erstellung eines korrekten JSON Array hättest...

          liv-in-sky 3 Replies Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @ThomKast last edited by

            @thomkast sagte in JSON Liste sortieren (Funktion):

            oPushList / ListOfFour

            in dieser function wird dein 4er array in ein array geschrieben .- der block, den du vorher hattest, hat das nicht wirklich gemacht

            @thomkast sagte in JSON Liste sortieren (Funktion):

            für die Erstellung eines korrekten JSON Array

            wenn du ein json array brauchst, würde ich das auch über eine javascript function machen - ich weiß leider nicht genau, was du als ergebnis haben möchtest - im moment - mit meiner version - bekommst du sowas :

            [
                [11.068,"06.01.2024",9,10],[11.676,"06.01.2024",10,11],[12.052,"06.01.2024",11,12],
                [11.899,"06.01.2024",12,13],[11.359,"06.01.2024",13,14],[11.096,"06.01.2024",14,15],
                [11.306,"06.01.2024",15,16],[11.795,"06.01.2024",16,17],[12.516,"06.01.2024",17,18],
                [12.436,"06.01.2024",18,19],[11.88,"06.01.2024",19,20],[11.057,"06.01.2024",20,21],
                [10.56,"06.01.2024",21,22],[10.388,"06.01.2024",22,23],[9.584,"06.01.2024",23,24],
                [10.09,"07.01.2024",0,25],[9.578,"07.01.2024",1,26],[9.211,"07.01.2024",2,27],
                [8.815,"07.01.2024",3,28],[8.623,"07.01.2024",4,29],[8.65,"07.01.2024",5,30]
              ]
            

            ein array mit 4er array's drin

            ein json array würde ja so aussehen und könnte dann auch leicht in der vis angezegt werden

            [
              {
                "wert1": 11.068,
                "wert2": "06.01.2024",
                "wert3": 9,
                "wert4": 10
              },
              {
                "wert1": 11.676,
                "wert2": "06.01.2024",
                "wert3": 10,
                "wert4": 11
              },
              // ... (weitere Daten hier)
              {
                "wert1": 8.65,
                "wert2": "07.01.2024",
                "wert3": 5,
                "wert4": 30
              }
            ]
            

            sucht du nach so einer lösung

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

              @thomkast
              in der vis könnte es so aussehen:

              Image 035.png

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

                @thomkast sagte in JSON Liste sortieren (Funktion):

                . Hättest Du einen Link, mit dem ich mich dazu mal einlesen kann. Ich stehe da gerade echt wie der Ochs vor'm Berg.

                leider nicht wirklich - ich habe das irgendwie im internet zusammengesucht, bis ich das ganze grob kapiert hatte - bei solchen verarbeitungen nutze ich auch lieber ein direktes javascript und nicht blockly - blockly ist für json-ver-/bearbeitung nicht so gut geeignet

                ich kann dir auch chatgpt empfehlen - dort kannst du dir auch solche funktionen machen lassen und nachfragen stellen

                z.b. speziell für ein json-object:

                mache aus dem array [
                [11.068,"06.01.2024",9,10],[11.676,"06.01.2024",10,11],[12.052,"06.01.2024",11,12],
                [11.899,"06.01.2024",12,13],[11.359,"06.01.2024",13,14],[11.096,"06.01.2024",14,15],
                [11.306,"06.01.2024",15,16],[11.795,"06.01.2024",16,17],[12.516,"06.01.2024",17,18],
                [12.436,"06.01.2024",18,19],[11.88,"06.01.2024",19,20],[11.057,"06.01.2024",20,21],
                [10.56,"06.01.2024",21,22],[10.388,"06.01.2024",22,23],[9.584,"06.01.2024",23,24],
                [10.09,"07.01.2024",0,25],[9.578,"07.01.2024",1,26],[9.211,"07.01.2024",2,27],
                [8.815,"07.01.2024",3,28],[8.623,"07.01.2024",4,29],[8.65,"07.01.2024",5,30]
                ] ein json mit keys wert1,wert2...

                ChatGPT
                Um aus dem Array ein JSON-Objekt mit den entsprechenden Keys zu erstellen, könntest du die Funktion map verwenden, um jedes Unterarray in ein Objekt umzuwandeln. Hier ist der Code, der das erreicht:

                javascript
                Copy code
                const data = [
                [11.068,"06.01.2024",9,10],[11.676,"06.01.2024",10,11],[12.052,"06.01.2024",11,12],
                [11.899,"06.01.2024",12,13],[11.359,"06.01.2024",13,14],[11.096,"06.01.2024",14,15],
                [11.306,"06.01.2024",15,16],[11.795,"06.01.2024",16,17],[12.516,"06.01.2024",17,18],
                [12.436,"06.01.2024",18,19],[11.88,"06.01.2024",19,20],[11.057,"06.01.2024",20,21],
                [10.56,"06.01.2024",21,22],[10.388,"06.01.2024",22,23],[9.584,"06.01.2024",23,24],
                [10.09,"07.01.2024",0,25],[9.578,"07.01.2024",1,26],[9.211,"07.01.2024",2,27],
                [8.815,"07.01.2024",3,28],[8.623,"07.01.2024",4,29],[8.65,"07.01.2024",5,30]
                ];

                function convertToJSON(dataArray) {
                const keys = ["wert1", "wert2", "wert3", "wert4"];
                const jsonArray = dataArray.map(item => {
                const obj = {};
                keys.forEach((key, index) => {
                obj[key] = item[index];
                });
                return obj;
                });
                return jsonArray;
                }

                const jsonData = convertToJSON(data);
                console.log(JSON.stringify(jsonData, null, 2));
                Diese Funktion convertToJSON erstellt ein neues Array von Objekten, wobei jedes Unterarray in ein Objekt umgewandelt wird, das die gewünschten Schlüssel hat (wert1, wert2, wert3, wert4). Am Ende wird das Ergebnis mit JSON.stringify in einen JSON-String umgewandelt und in der Konsole ausgegeben.

                User
                wie sieht das json dann aus
                ChatGPT
                Das generierte JSON sieht so aus:

                json
                Copy code
                [
                {
                "wert1": 11.068,
                "wert2": "06.01.2024",
                "wert3": 9,
                "wert4": 10
                },
                {
                "wert1": 11.676,
                "wert2": "06.01.2024",
                "wert3": 10,
                "wert4": 11
                },
                // ... (weitere Daten hier)
                {
                "wert1": 8.65,
                "wert2": "07.01.2024",
                "wert3": 5,
                "wert4": 30
                }
                ]
                Jedes Unterarray aus dem ursprünglichen Array wurde in ein Objekt umgewandelt, wobei die Werte entsprechend den Schlüsseln "wert1", "wert2", "wert3" und "wert4" eingefügt wurden.

                das script dazu wäre dann folgendes:

                hier wird am ende das json object erzeugt - mit der function aus chatgpt 🙂 und in einen datenpunkt geschrieben - dieser dp ist in der vis mit einem inventwo json widget angezeigt (bild oben)

                aaaScriptSort.txt

                1 Reply Last reply Reply Quote 0
                • T
                  ThomKast last edited by

                  @liv-in-sky OKAY 👏 😀 ... Da muss ich mich erst mal reinarbeiten. Wird ein wenig dauern und ich melde mich dann wieder 👍

                  1 Reply Last reply Reply Quote 0
                  • T
                    ThomKast last edited by

                    @liv-in-sky So... Habe nun auch rausbekommen, an welcher Stelle die Erstellung eine JSON unter Blockly hakte. Es fehlten die ständigen Konvertierungen "JSON nach Objekt" und "Objekt nach JSON". Es wird halt kein JSON weggeschrieben sondern "nur" ein String, der immer wieder hin-und-her zu konvertieren ist, je nachdem was gebraucht wird...

                    Ich bin voll und ganz bei Dir. Direkt in JS wäre das sicher kein Problem, da direkt mit Typ JSON gearbeitet wird. Leider bin ich in JS nicht firm genug...

                    Rein Zur Info mal das Ergebnis mit funktionalen Sortierungen... Sofern Du es ausprobieren möchtest, bedarf es noch eines STRING-Datenpunktes
                    c7bfed15-c0de-417e-a9a8-597aaf07a2d2-image.png

                    Skript: 2024-01-07_APIS_EPEX_sortieren_und_Laden-Aufheizen.json

                    Herzlichen Dank für Deine Unterstützung und damit verbundene Zeit und Mühe. Du hast mir riesig geholfen. 👏 👏 👏

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

                      hallo @liv-in-sky
                      ich habe ein ähnliches Problem und komme da nicht weiter.
                      ich habe daten aus 2 Kalender in einem json nach diesem Beispiel:

                      [[{"id":"20240318T000000CET-39684@c-trace.de","calendarName":"Marc","summary":"XXXX","date":"2024-03-17T23:00:00.000Z","timeText":"den ganzen Tag","dateText":"in 3 Tagen"},{"id":"20240319T000000CET-38713@c-trace.de","calendarName":"Marc","summary":"XXX","date":"2024-03-18T23:00:00.000Z","timeText":"den ganzen Tag","dateText":"in 4 Tagen"}],[{"id":"0e6368f6-053d-477f-a87a-6a830baf7e21","calendarName":"Maria","summary":"XXXX","date":"2024-03-14T23:00:00.000Z","timeText":"den ganzen Tag","dateText":"heute"},{"id":"5d36bf71-ef8d-45d2-bff5-0cc370cc018b","calendarName":"Maria","summary":"XXXX","date":"2024-03-21T07:15:00.000Z","startTime":"08:15","endTime":"09:15","timeText":"von 08:15 bis um 09:15","dateText":"in 6 Tagen"}]]
                      

                      Das würde ich jetzt gerne nach Date sortieren, bekomme es aber leider nicht hin mit dem Skript von dir ganz oben. Leider sortiert er da gar nichts.

                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                      • haus-automatisierung
                        haus-automatisierung Developer Most Active @Marc9025 last edited by

                        @marc9025 Achtung: Das ist ein Array aus Arrays (mit der Länge 1). Also nicht einfach nur ein Array von Objekten.

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Marc9025 @haus-automatisierung last edited by

                          @haus-automatisierung
                          ich habe die beiden json selber zusammen gefügt, habe es aber nicht hinbekommen die Ausgabe in einem Array zu bekommen.

                          dc56f3ce-6ac7-4638-b56a-0251dc4e98a3-image.png

                          haus-automatisierung 1 Reply Last reply Reply Quote 0
                          • haus-automatisierung
                            haus-automatisierung Developer Most Active @Marc9025 last edited by haus-automatisierung

                            @marc9025 Zeig mal was als Wert in den beiden Datenpunkten steht. Dann ist das wahrscheinlich schon jeweils ein Array. Du bräuchtest ein ".concat" um die beiden Arrays zu verbinden. Müsste selbst mal schauen ob es das in Blockly gibt.

                            Alternativ über beide Arrays iterieren und jeweils das Element an eine leere Liste anhängen.

                            M 1 Reply Last reply Reply Quote 0
                            • M
                              Marc9025 @haus-automatisierung last edited by

                              @haus-automatisierung
                              im Prinzip steht das von oben in den beiden Datenpunkte.
                              Nur jeweils das 1 Array mit den Kalenderdaten von Marc und im 2 Array mit Maria

                              haus-automatisierung 1 Reply Last reply Reply Quote 0
                              • haus-automatisierung
                                haus-automatisierung Developer Most Active @Marc9025 last edited by haus-automatisierung

                                @marc9025 sagte in JSON Liste sortieren (Funktion):

                                @haus-automatisierung
                                im Prinzip steht das von oben in den beiden Datenpunkte.
                                Nur jeweils das 1 Array mit den Kalenderdaten von Marc und im 2 Array mit Maria

                                Dann ist die Struktur also [{}] und [{}]. Das wird dann halt zu [ [{}], [{}] ]. Wenn es wirklich immer nur ein Element ist (wozu dann das Array?), könnte man auch jeweils das erste Element aus der Liste holen und dies in die neue Liste packen.

                                EDIT: Ich seh gerade, sind ja schon mehrere Elemente enthalten. Also müsste man iterieren und hinzufügen.

                                M 1 Reply Last reply Reply Quote 0
                                • M
                                  Marc9025 @haus-automatisierung last edited by

                                  @haus-automatisierung
                                  ja genau so ist die Struktur.
                                  Was ist iterieren bzw wie kann man das umsetzen ?

                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @Marc9025 last edited by

                                    @marc9025 Na eine Schleife nutzen. "Für jeden Wert von ..." und dann hinzufügen zu neuer Liste.

                                    M 1 Reply Last reply Reply Quote 0
                                    • M
                                      Marc9025 @haus-automatisierung last edited by

                                      @haus-automatisierung
                                      ich habe jetzt mehrere Variation durch gespielt komme aber leider nicht auf das gewünschte Ergebnis.

                                      810a2edf-d671-4736-a489-b5f2dcd1e320-image.png

                                      Bei der Variante nimmt er einfach nur die 2 Liste.

                                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                                      • haus-automatisierung
                                        haus-automatisierung Developer Most Active @Marc9025 last edited by

                                        @marc9025 Naja bringt ja auch nix weiterhin eine Array mit zwei weiteren Arrays zu erzeugen. Meinte das so:

                                        Screenshot 2024-03-15 at 14.29.32.png

                                        Ergibt

                                        [
                                           {
                                              "id":"20240318T000000CET-39684@c-trace.de",
                                              "calendarName":"Marc",
                                              "summary":"XXXX",
                                              "date":"2024-03-17T23:00:00.000Z",
                                              "timeText":"den ganzen Tag",
                                              "dateText":"in 3 Tagen"
                                           },
                                           {
                                              "id":"20240319T000000CET-38713@c-trace.de",
                                              "calendarName":"Marc",
                                              "summary":"XXX",
                                              "date":"2024-03-18T23:00:00.000Z",
                                              "timeText":"den ganzen Tag",
                                              "dateText":"in 4 Tagen"
                                           },
                                           {
                                              "id":"0e6368f6-053d-477f-a87a-6a830baf7e21",
                                              "calendarName":"Maria",
                                              "summary":"XXXX",
                                              "date":"2024-03-14T23:00:00.000Z",
                                              "timeText":"den ganzen Tag",
                                              "dateText":"heute"
                                           },
                                           {
                                              "id":"5d36bf71-ef8d-45d2-bff5-0cc370cc018b",
                                              "calendarName":"Maria",
                                              "summary":"XXXX",
                                              "date":"2024-03-21T07:15:00.000Z",
                                              "startTime":"08:15",
                                              "endTime":"09:15",
                                              "timeText":"von 08:15 bis um 09:15",
                                              "dateText":"in 6 Tagen"
                                           }
                                        ]
                                        
                                        1 Reply Last reply Reply Quote 1
                                        • M
                                          Marc9025 last edited by

                                          @haus-automatisierung
                                          vielen Dank, das hat schon mal geklappt.
                                          Zum Sortiten habe ich das Skript oben benutz aber leider gibt er mir Fehler aus.
                                          Hast du da noch ein tipp für mich wie ich da nach Date sortieren kann.

                                          81bdefd0-9872-49f5-8a57-63f550799341-image.png

                                          DJMarc75 1 Reply Last reply Reply Quote 0
                                          • DJMarc75
                                            DJMarc75 @Marc9025 last edited by DJMarc75

                                            @marc9025

                                            Probier mal so (mit Jsonata)

                                            Screenshot 2024-03-15 151747.png

                                            M 1 Reply Last reply Reply Quote 2
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            516
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            62
                                            4501
                                            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