Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Einlesen eines Arrays in Javascript klappt nicht

    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

    [gelöst] Einlesen eines Arrays in Javascript klappt nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Ben1983 last edited by paul53

      @ben1983 sagte: der wert wird ja aus dem Adapter geschrrieben.

      Issue auf Github erstellen.

      Workaround:

      on(regExDeviceGeofences,(dp)=>{
          let Geofences = dp.state.val;
          if(typeof Geofences == 'string') Geofences = JSON.parse(Geofences);
      };
      
      Ben1983 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Ben1983 last edited by

        @ben1983
        Ich kann im Objektbaum rumeditieren oder einfach per setState('...', '["blubb"]') reinschreiben. Funktioniert problemlos.

        Ben1983 1 Reply Last reply Reply Quote 0
        • Ben1983
          Ben1983 @Codierknecht last edited by Ben1983

          @codierknecht
          Ja reinschreiben oder rumeditieren geht ja auch, aber wenn man mit
          setState(id,array); rein schreibt, kann man es später nicht mehr parsen beim lesen,
          dazu sollte es mit
          setState(id,JSON.stringify(array)); rein geschrieben werden.

          Habe den Wert noch wo ander gefunden, wie von @ticaki erwähnt.
          ich trenne ihn mit split.
          Nicht der Ursprung des Problems, aber naja.

          Codierknecht T haus-automatisierung 3 Replies Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @Ben1983 last edited by

            @ben1983

            @paul53's Vorschlag mit dem Issue ist ja auch nicht die schlechteste Idee 😉

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @Ben1983 last edited by

              @ben1983

              Was mich halt wundert ist das der Adapter es richtig macht... https://github.com/arteck/ioBroker.traccar/blob/e72f9144b44a294604039ab69ee6de4ff7728d13/main.js#L245

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

                @ticaki sagte: der Adapter es richtig macht...

                Vielleicht an einer anderen Stelle nicht?
                Wenn ein Array in einen DP vom Typ "string" geschrieben wird, erzeugt der js-controller eine Warnung.

                Codierknecht 1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @paul53 last edited by

                  @paul53 sagte in Einlesen eines Arrays in Javascript klappt nicht:

                  Wenn ein Array in einen DP vom Typ "string" geschrieben wird, erzeugt der js-controller eine Warnung.

                  Das sollte @Ben1983 dann im Log erkennen können.

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

                    @ben1983 sagte in Einlesen eines Arrays in Javascript klappt nicht:

                    setState(id,array); rein schreibt, kann man es später nicht mehr parsen beim lesen,
                    dazu sollte es mit
                    setState(id,JSON.stringify(array)); rein geschrieben werden.

                    Ja, logisch. Der Datentyp des Datenpunktes ist ja string. Also musst Du auch einen string schreiben (und kein Array).

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

                      @haus-automatisierung Ja das war ja nur einer Feststellung, dass beim reinschreiben als Array genau dieser Fehler auftaucht.... also eventuell im Adapter so gemacht wird

                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                      • Ben1983
                        Ben1983 @paul53 last edited by

                        @paul53 was soll mir eigentlich dieser Wirkstoff bringen?
                        Der type ist ja immer bei dem Datenpunkt String.

                        haus-automatisierung paul53 2 Replies Last reply Reply Quote 0
                        • haus-automatisierung
                          haus-automatisierung Developer Most Active @Ben1983 last edited by haus-automatisierung

                          @ben1983 sagte in Einlesen eines Arrays in Javascript klappt nicht:

                          Der type ist ja immer bei dem Datenpunkt String.

                          Du meinst die Warnung? Die soll Dir sagen, dass Du etwas falsch machst. Wenn Du den Datentyp nicht auf string, sondern auf array stellst, dann wird (logischerweise) nach wie vor JSON gespeichert, aber die Konvertierung hin und zurück erledigt der JavaScript-Adapter für Dich.

                          Gilt natürlich nur für eigene Datenpunkte. Bei den Datenpunkten von Adaptern muss man damit leben, was dir die Entwickler liefern. Da stellt man bitte nicht einfach den Datentyp um.

                          Dann könntest Du auch direkt ein Array in setState übergeben - ohne JSON.stringify(). Und beim Lesen brauchst Du auch kein JSON.parse() mehr. Das gilt für Datentyp array und object.

                          Habe ich aber auch alles schon rauf und runter erklärt mit Beispielen...

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

                            @haus-automatisierung nochmal… ich schreibe NICHT in den Datenpunkt.
                            Wollte das nur testen, dass es dann diesen Fehler gibt .

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

                              @ben1983 sagte in Einlesen eines Arrays in Javascript klappt nicht:

                              Ja das war ja nur einer Feststellung, dass beim reinschreiben als Array genau dieser Fehler auftaucht.... also eventuell im Adapter so gemacht wird

                              Der Adapter schreibt natürlich sauber einen JSON-String. Da wurde die Referenz zum Code weiter oben ja schon geteilt.

                              Auf was willst Du gerade hinaus? Du hast den Wert falsch geschrieben und daher habe ich nochmal die Grundlagen erläutert.

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

                                @haus-automatisierung ich habe keine Wert geschrieben.
                                Ich mache ein

                                JSON.parse(dp.state.val)
                                

                                Und da komme kein Array als Objekt heraus.
                                Habe lediglich gemeint, dass genau dieser Fehler auftritt, wenn Mann eben nicht als jsonstring in den dp schreibt.

                                Ich schreibe also nicht, lese nur den dp aus und parse ihn.

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

                                  @ben1983 sagt: Der type ist ja immer bei dem Datenpunkt String.

                                  ... aber offenbar nicht der tatsächlich enthaltene Wert. Deshalb prüfen, ob der Wert vom Typ "string" ist und nur dann parsen.

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

                                    @paul53 Wie gesagt, ist immer string...

                                    Aber ich muss alles zurücknehmen.
                                    Mir ist beim Einbauen von mehrerenloggings aufgefallen, dass der Aufruf mehrfach kam.

                                    Die regExp, welche ich zum Triggern nutze, die hatte auf noch einen Datenpunkt zugetroffen.
                                    Nämlich auf den, in dm die Werte als String mit Komma getrennt und nicht in einem Array stehen.
                                    Aus diesem Grund ist es bei der Fehlermeldung nicht gleich aufgefallen, da der Inhalt ja mehr oder weniger gleich war.
                                    Natürlich kann dort das parsen nicht klappen.

                                    Habe nun an die reExp noch ein

                                    $
                                    

                                    an das Ende gesetzt und jetzt funktioniert alles.
                                    Komischerweise arbeitet die regExp im Adapter nicht mit \z am schluss. (Das geht laut diversen internet regExp testern.
                                    Aber ein $ tut es wohl auch.

                                    T 1 Reply Last reply Reply Quote 0
                                    • T
                                      ticaki Developer @Ben1983 last edited by ticaki

                                      @ben1983

                                      ich kannte \z nicht mal. Hab Chatgpt gefragt ohne Javascript zu erwähnen und der meint dazu

                                      Bildschirmfoto 2025-02-28 um 23.36.48.png

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      538
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      34
                                      1202
                                      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