NEWS
[gelöst] JSON nach kleinstem Wert parsen
-
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
-
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]
-
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]
-
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]
-
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]
-
Paul:
DANKE! Läuft.
Wann ich "stringify" nutzen muss und wann nicht, werde ich wohl nie verstehen
-
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).