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 Table erstellen Javascript

    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

    UNSOLVED JSON Table erstellen Javascript

    This topic has been deleted. Only users with topic management privileges can see it.
    • 0
      0018 last edited by

      Re: JSON Table erstellen

      Hallo zusammen,

      ich habe mir aus dem Post mal das Script genommen um mir selbst eine JSON Tabelle zu erzeugen. Folgender Script habe ich angepasst:

      const idsDay = [SK_inz_heute_day, SK_inz_gestern_day, SK_inz_vorgestern_day]; // Datenpunkt-IDs eintragen
      const idsVal_Stadt = [SK_inz_heute_val, SK_inz_gestern_val, SK_inz_vorgestern_val]; // Datenpunkt-IDs eintragen
      const idsVal_Land = [LK_inz_heute_val, LK_inz_gestern_val, LK_inz_vorgestern_val]; // Datenpunkt-IDs eintragen
      const days = ['Heute','Gestern','3Tage'];
      
      
      var table = [];
          if (debug) log ("Tabelle gestartet");
          for(let i = 0; i < days.length; i++) {
              table[i] = {};
              table[i].Tag = days[i];
              table[i].Datum = getState(idsDay[i]).val;
              table[i].Wert_Stadt = getState(idsVal_Stadt[i]).val;
              table[i].Wert_Land = getState(idsVal_Land[i]).val;
          }
      //setState(idTable, JSON.stringify(table), true);
      setState(LK_inz_table, JSON.stringify(table), true);
      
      on(idsVal_Stadt, function(dp) {
          if (debug) log ("idsVal_Stadt gestartet");
          let idx = idsVal_Stadt.indexOf(dp.id);
          table[idx].Wert_Stadt = dp.state.val;
          setState(LK_inz_table, JSON.stringify(table), true);
      });
      
      on(idsVal_Land, function(dp) {
          if (debug) log ("idsVal_Land gestartet");
          let idx = idsVal_Land.indexOf(dp.id);
          table[idx].Wert_Land = dp.state.val;
          setState(LK_inz_table, JSON.stringify(table), true);
      });
      
      on(idsDay, function(dp) {
          if (debug) log ("idsDay gestartet");
          let idx = idsDay.indexOf(dp.id);
          table[idx].Datum = dp.state.val;
          setState(LK_inz_table, JSON.stringify(table), true);
      });
      

      Der Code ist Teil eines Scriptes, daher sind die verwendeten Variablen (SK_inz_heute_day usw) im anderen Teil des Scriptes definiert. Das Script funktioeirt auch soweit und ich bekomme auch die Tabelle wie gewünscht gefüllt.

      Leider würde ich gerne den kompletten Code auch verstehen und bei einer Zeile fehlt mir die Erklärung dazu:

      for(let i = 0; i < days.length; i++) {
      

      Kann mir hier jemand kurz erläutern was genau hier gemacht wird und wofür das "i" steht?

      Zudem bekomme ich im Scripteditor folgenden Fehler angezeigt:
      Script.jpg

      Ist das normal oder muss noch was im Script ergänzt werden?

      liv-in-sky mickym 2 Replies Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @0018 last edited by

        @0018

        • das i ist ein zähler in einer schleife- beginne bei 0 zu zählen -> zähle solange, bis i < "anzahl der inhalte" -> erhöhe um 1 bei jedem schritt (google mal nach "javascript schleife" oder so ähnlich) - damit wird durch ein array (namens day) durchgegangen und zwar "anzahl der inhalte = heute, gestern ,3-tage) - also 3 mal

        • das unterkringelte sind keine fehler - nur der script-editor kennt es nicht - wird aber bekannt, wenn das script läuft - kann ignoriert werden

        1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @0018 last edited by

          @0018

          1. Dein Codefragement ist einfach eine Schleife. i stellt einfach den ITERATOR dar - deswegen nimmt man auch gerne den Buchstaben i mit dem die Schleife durchiteriert wird.

          Das Ganze soll ja eine Tabelle mit days.length Tagen erstellt werden. Da Arrays in JS immer bei 0 beginnen, lässt man i von 0 bis zählen.

          1. Die Fehlermeldung bekommst Du weg, in dem Du das Array Deiner Tabelle nicht mit einem leeren Objekt initiailisierst, sondern eben mit den entsprechenden Eigenschaften.

          Also statt
          table[i]={}

          eben

          table[i] = {Tag = 0, Datum = "", Wert_Stadt = "", Wert_Land = ""} bzw. je nachdem was für halt dieses Funktionen zurückgeben.

          0 1 Reply Last reply Reply Quote 0
          • 0
            0018 @mickym last edited by

            @mickym sagte in JSON Table erstellen Javascript:

            Also statt
            table[i]={}
            eben
            table[i] = {Tag = 0, Datum = "", Wert_Stadt = "", Wert_Land = ""} bzw. je nachdem was für halt dieses Funktionen zurückgeben.

            Also wird hierüber definiert, wie die Spalten angeordnet werden? Also Tag gleich 0 und somit die erste Spalte?

            Wenn ich deinen Code

            table[i] = {Tag = 0, Datum = "", Wert_Stadt = "", Wert_Land = ""}
            

            verwende, bekomme ich folgende Meldungen:

            J1.jpg

            J2.jpg

            Letztendlich sieht die fertige Tabelle so aus:
            Tabelle.jpg

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @0018 last edited by OliverIO

              @0018 sagte in JSON Table erstellen Javascript:

              @mickym sagte in JSON Table erstellen Javascript:

              Also statt
              table[i]={}
              eben
              table[i] = {Tag = 0, Datum = "", Wert_Stadt = "", Wert_Land = ""} bzw. je nachdem was für halt dieses Funktionen zurückgeben.

              Also wird hierüber definiert, wie die Spalten angeordnet werden? Also Tag gleich 0 und somit die erste Spalte?

              Wenn ich deinen Code

              table[i] = {Tag = 0, Datum = "", Wert_Stadt = "", Wert_Land = ""}
              

              verwende, bekomme ich folgende Meldungen:

              J1.jpg

              J2.jpg

              Letztendlich sieht die fertige Tabelle so aus:
              Tabelle.jpg

              Die Reihenfolge steuerst du über die Reihenfolge in den Array-Variablen in den ersten 4 Zeilen.
              In days stehen die Titel und
              in idsDay,idsVal_Stadt und idsVal_Land die DatenpunktIDs zu den Werten.
              d.h. jeweils der erste Wert aus allen 4 Zeilen ist die 1.Tabellenzeile,
              der 2.Wert ist die 2.Tabellenzeile usw.
              Alle Arrays in den 4 Zeilen müssen die gleiche Anzahl von Elemente haben, sonst passt es nicht zusammen.
              Als Anmerkung: ich würde das anders machen. Aber fürs lernen ist es ok

              Das was @mickym geschrieben hat ist nicht richtig.
              Auch die vorgeschlagene Initialisierung ist falsch, da in einem Objektliteral es wie folgt geschrieben werden muss:

              table[i] = {Tag:0, Datum:"", Wert_Stadt:"", Wert_Land:""} 
              

              Ist aber wie gesagt nicht notwendig. Da dur nur die Anzeige im Editor befriedigst, aber keine Auswirkung auf die Funktionsfähigkeit des Skript hat.
              @liv-in-sky hat das schon so richtig beschrieben.
              Meines Erachtens sollten das nur Warnungen sein, da es keine echten Fehler sind.
              Wenn das Skript läuft gibt es ja kein Fehler, oder?

              Noch eine Anmerkung: Die Überschriften sehe ich nirgends in deinem Code.

              0 mickym 2 Replies Last reply Reply Quote 0
              • 0
                0018 @OliverIO last edited by

                Super vielen Dank, die Erklärungen habe ich soweit verstanden 🙂

                @oliverio sagte in JSON Table erstellen Javascript:

                Als Anmerkung: ich würde das anders machen. Aber fürs lernen ist es ok

                Wie würde deine Variante aussehen? Vielleicht erscheint mir diese ja leichter 😊

                @oliverio sagte in JSON Table erstellen Javascript:

                Noch eine Anmerkung: Die Überschriften sehe ich nirgends in deinem Code.

                Die Überschriften habe ich via Material Design-Table Widget eingefügt. Sollten die Überschriften lieber gleich im JSON mitgegeben werden? Wenn ja wie müsste man diese im Script einbinden?

                1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @OliverIO last edited by

                  @oliverio sagte in JSON Table erstellen Javascript:

                  Das was @mickym geschrieben hat ist nicht richtig.

                  Stimmt - aber hast mich ja korrekt verbessert. 🙂

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  469
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  970
                  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