Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] JSON nach kleinstem Wert parsen

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    [gelöst] JSON nach kleinstem Wert parsen

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

      Hallo zusammen,

      mal wieder scheitere ich.

      Hintergrund:

      Picnic hat hier http://forum.iobroker.net/viewtopic.php … 282#p92282 aus einem meiner Skripte etwas mehr gezaubert und erzeugt ein JSON, in dem eine schöne Grafik, die Tage bis zur Abholung usw für den Müll angezeigt werden.

      Nun möchte ich aber für meine neuen Views das ganze auf der Main View so haben, dass er mir nur noch die Tage bis zum nächsten Müll (egal welche Art) anzeigt. Ich bekomme es einfach nicht hin, aus dem JSON das Minimum der Tage rauszufiltern, wobei man auch noch berücksichtigen müsste, dass es bei 0 Tagen "Heute" heißt. Das könnte man aber auch durch Sichtbarkeiten regeln.

      In dem JSON steht das hier (die Dinge für die Grafiken habe ich hier mal entfernt zwecks Lesbarkeit. Wie bekomme ich da nun eben die 4 als Minimum extrahiert?

      [{"Müllart":" Restabfall","Tage":"25"}, {"Müllart":" Papiertonne","Tage":"27"},{"Müllart":" Bioabfall","Tage":"4"},{"Müllart":" Gelber Sack","Tage":"4"}]
      
      

      Danke an alle Könner

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

        Etwa so:

        `var obj = JSON.parse(json);
        var min = 99;
        for(var i = 0; i < obj.length; i++) {
            var x = parseInt(obj[i].Tage);
            if(x < min) min = x; 
        }` [/i]
        
        1 Reply Last reply Reply Quote 0
        • T
          tempestas last edited by

          Hallo paul,

          vielen Dank (ich hatte ein wenig auf deine Expertise gehofft 🙂

          ich habs jetzt so probiert

          `var myjson ="javascript.0.muell.json"/*javascript.0.muell.json*/;
          var json= JSON.stringify(myjson);
          
          var obj = JSON.parse(json);
          var min = 99;
          for(var i = 0; i < obj.length; i++) {
              var x = parseInt(obj[i].Tage);
              if(x < min) min = x;
          
          }
          
          log("Minimum ist "+x);` 
          
          Gibt mir "NaN" aus?
          
          Ich durchsteige JSONs noch nicht wirklich
          
          Edit: wenn ich die von mir hier dargestellt Beispiel-JSON nehme, funktioniert es wunderbar. Was mache ich mit dem eigentlichen State dann falsch?
          
          Edit 2: müsste wohl 
          
          `~~[code]~~var json= JSON.stringify(getState(myjson).val);[/code]` heißen? Fehler bleibt aber. Dann müsen die Grafiken wohl Ärger machen
          
          Edit 3:
          
          habe mal die Grafik entfernt, keine Änderung. Verstehe ich nicht.[/i]
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            Wenn der Datenpunkt mit der ID javascript.0.muell.json den JSON-String enthält, dann so:

            `const idjson ="javascript.0.muell.json"/*javascript.0.muell.json*/;
            
            var json = getState(idjson).val;
            var obj = JSON.parse(json);
            var min = 99;
            for(var i = 0; i < obj.length; i++) {
                var x = parseInt(obj[i].Tage);
                if(x < min) min = x;
            
            }
            
            log("Minimum ist " + min);`[/i]
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              Habe den ersten Beitrag nochmal gelesen mit "Heute" anstelle "0". Dann muss das Skript erweitert werden

              `const idjson ="javascript.0.muell.json"/*javascript.0.muell.json*/;
              
              var json = getState(idjson).val;
              var obj = JSON.parse(json);
              var min = 99;
              for(var i = 0; i < obj.length; i++) {
                  var x = obj[i].Tage;
                  if(x == 'Heute') x = 0;
                  else x = parseInt(x);
                  if(x < min) min = x;
              }
              
              log("Minimum ist " + min);` [/i]
              
              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Paul:

                DANKE! Läuft.

                Wann ich "stringify" nutzen muss und wann nicht, werde ich wohl nie verstehen 🙂

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

                  @tempestas:

                  Wann ich "stringify" nutzen muss und wann nicht, werde ich wohl nie verstehen `
                  Ist doch nicht so schwierig: Ein Objekt (Array) in einen JSON-String wandeln mit JSON.stringify(obj); umgekehrt einen JSON-String in ein Objekt (Array) wandeln mit JSON.parse(json).

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  616
                  Online

                  32.1k
                  Users

                  80.7k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  632
                  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