NEWS
JSON Liste sortieren (Funktion)
-
Moin zusammen,
bin dabei meine Einkaufslisten, die ich über Alexa befülle, zu visualisieren und möchte sie nach bestimmten Kriterien sortieren.
In vis habe ich mir eine JSON-Tabelle angelegt, die ich gerne mit sortierten Daten füttern möchte.
Anbei einmal ein paar Screenshots und eine JSON-Liste.
Kann mir jemand auf die Sprünge helfen, wie ich eine Funktion zur Sortierung der JSON-Datei nach dem Attribut "Value" erstellen kann?
Irgendwie komme ich mit den Anleitungen aus dem Netz nicht so richtig klar... -
suchst du sowas
kannst du laufen lassen und im log ergebnis ansehen
const eee = '[{"completed":false,"createdDateTime":1600836491057,"customerId":null,"id":"cb36a654-192d-4a48-823a-5ecf71ad35c0","listId":"a991e6e7-0140-4c7a","shoppingListItem":false,"updatedDateTime":1600836491057,"value":"Geflügelfont","version":1},{"completed":false,"createdDateTime":1600586315221,"customerId":null,"id":"056a4c34-37c1-4b08-a94a-1167ae1f0de6","listId":"a991e6e7-0140-4c7a","shoppingListItem":false,"updatedDateTime":1600600217883,"value":"Cola","version":3},{"completed":false,"createdDateTime":1600419220481,"customerId":null,"id":"fd7967e9-d242-4138-884d-8cb603c46c76","listId":"a991e6e7-0140-4c7a","shoppingListItem":false,"updatedDateTime":1600419220481,"value":"Kondensmilch","version":1},{"completed":false,"createdDateTime":1600233773895,"customerId":null,"id":"5a8a0938-bb16-4b24-a86c-31ca55a1d722","listId":"a991e6e7-0140-4c7a","shoppingListItem":false,"updatedDateTime":1600233773895,"value":"Rinderfond","version":1},{"completed":true,"createdDateTime":1600418722383,"customerId":null,"id":"0c4d9eb4-d50d-4390-aa8e-1b797e95591c","listId":"a991e6e7-0140-4c7a","shoppingListItem":false,"updatedDateTime":1600614493458,"value":"Gemüsesaft","version":3}]' let myObj=JSON.parse(eee) for(let i=0;i<myObj.length;i++){ log(myObj[i].value)} myObj.sort(function (alpha, beta) { if ((alpha.value.toUpperCase()).trim() > (beta.value.toUpperCase()).trim()) return 1; if ((beta.value.toUpperCase()).trim() > (alpha.value.toUpperCase()).trim()) return -1; }); for(let i=0;i<myObj.length;i++){ log(myObj[i].value)}
-
die .trim() kannst du weg lassen - das .toUpperCase() evtl auch
myObj.sort(function (alpha, beta) { if (alpha.value > beta.value) return 1; if (beta.value > alpha.value) return -1; });
das json wird erstmal in ein object verwandelt mit JSON.parse()
-
@PPAM sagte:
nach dem Attribut "Value" erstellen kann?
Das Attribut lautet "value" (klein geschrieben). Funktion:
-
-
-
@paul53 WOW seid ihr schnell
Wahnsinn
Werde es nachher ausprobieren und mich melden...Dank an euch beide
-
@paul53 und @liv-in-sky
vielen Dank
genau das war´s , was ich gesucht habe.Schönen Abend euch allen
-
morgen,
ich stehe vor dem selben "problem" mit dem sortieren einer json liste
liste wird über die aufzählungen und eine blockly erzeugt[[" Bewegungsmelder Keller","100%"],[" Schalter Licht Keller","43%"],[" Schalter Ladegerät klein","85%"],[" Schalter Ladegerät groß","76%"],[" Schalter Abstellraum","89%"],[" Schalter Badezimmer","100%"],[" Schalter Kinderzimmer Bett","58%"],[" Schalter Kinderzimmer Türe","100%"],[" Schalter Schlafzimmer Chef","100%"],[" Schalter Schlafzimmer Chefin","100%"],[" Schalter Schlafzimmer Türe","25%"],[" Sensor Abstellraum","68%"],[" Sensor Badezimmer","65%"],[" Sensor Eingangsbereich","48%"],[" Sensor Küche links","70%"],[" Sensor Küche rechts","44%"],[" Sensor Schlafzimmer","64%"],[" Sensor Toilette","48%"],[" Sensor vor Badezimmer","25%"],[" Sensor vor Wohnzimmer","14%"],[" Schloss Keller","26%"],[" Schloss Wohnung","88%"],[" Wischsklave","100%"],[" Rollo Kinderzimmer","91%"],[" Wandtaster Rollo Kinderzimmer","74%"],[" Multisensor Badezimmer","34%"],[" Vibrationssensor Wohnzimmerfenster","100%"],[" Vibrationssensor Balkonfenster","100%"],[" Vibrationssensor Badezimmerfenster","91%"],[" Vibrationssensor Kinderzimmer","97%"],[" Vibrationssensor Balkontüre","91%"],[" Vibrationssensor Schlafzimmer","86%"],[" Multisensor Bierkühlschrank","51%"],[" Multisensor Kühlschrank","68%"],[" Multisensor Gang","74%"],[" Bewegungsmelder Balkon","100%"],[" Bewegungsmelder Kinderzimmer","100%"],[" Fernbedienung Radio Bad","100%"],[" Wandtaster Rollo Schlafzimmer","74%"],[" Wandaster Rollo Badezimmer","74%"],[" Rollo Schlafzimmer","67%"],[" Rollo Badezimmer","65%"],[" Heizkörper Thermostat Badezimmer","100%"]]
liste in vis anzeigen (layout muss noch angepasst werden)
liste sortiert anzeigen (akkustand auf/absteigend)
bin für jede hilfe danbkbar -
-
danke für die hilfe
hmm wenn ich mir so die erste zeile ansehe, ist der teil/inhalt meiner json liste ja "hardcoded", oder verstehe ich das nur falsch? -
ja - ich habe das nur in ein eigenes script gepakt und getestet ob das sortiert - du brauchst das natürlich nicht - du hast ja eine eigene erstellte list in deinem script
-
let jsonArr=JSON.stringify([[" Bewegungsmelder Keller","100%"],[" Schalter Licht Keller","43%"],[" Schalter Ladegerät klein","85%"],[" Schalter Ladegerät groß","76%"],[" Schalter Abstellraum","89%"],[" Schalter Badezimmer","100%"],[" Schalter Kinderzimmer Bett","58%"],[" Schalter Kinderzimmer Türe","100%"],[" Schalter Schlafzimmer Chef","100%"],[" Schalter Schlafzimmer Chefin","100%"],[" Schalter Schlafzimmer Türe","25%"],[" Sensor Abstellraum","68%"],[" Sensor Badezimmer","65%"],[" Sensor Eingangsbereich","48%"],[" Sensor Küche links","70%"],[" Sensor Küche rechts","44%"],[" Sensor Schlafzimmer","64%"],[" Sensor Toilette","48%"],[" Sensor vor Badezimmer","25%"],[" Sensor vor Wohnzimmer","14%"],[" Schloss Keller","26%"],[" Schloss Wohnung","88%"],[" Wischsklave","100%"],[" Rollo Kinderzimmer","91%"],[" Wandtaster Rollo Kinderzimmer","74%"],[" Multisensor Badezimmer","34%"],[" Vibrationssensor Wohnzimmerfenster","100%"],[" Vibrationssensor Balkonfenster","100%"],[" Vibrationssensor Badezimmerfenster","91%"],[" Vibrationssensor Kinderzimmer","97%"],[" Vibrationssensor Balkontüre","91%"],[" Vibrationssensor Schlafzimmer","86%"],[" Multisensor Bierkühlschrank","51%"],[" Multisensor Kühlschrank","68%"],[" Multisensor Gang","74%"],[" Bewegungsmelder Balkon","100%"],[" Bewegungsmelder Kinderzimmer","100%"],[" Fernbedienung Radio Bad","100%"],[" Wandtaster Rollo Schlafzimmer","74%"],[" Wandaster Rollo Badezimmer","74%"],[" Rollo Schlafzimmer","67%"],[" Rollo Badezimmer","65%"],[" Heizkörper Thermostat Badezimmer","100%"]] )
hmm hab nun endlich einmal ein bischen zeit die baustelle fertig zu machen, wie mus ich nun den teil oben abändern um auf die liste die unter 0_userdata.0.Vis.Liste_Batteriestatus liegt zuzugreifen?
Danke im Voraus. -
beim pfeil muss dein datenpunkt rein - im log siest du dann die sortierte liste
hier ist der import für blockly
-
@liv-in-sky sagte in JSON Liste sortieren (Funktion):
hmm dann bekomme ich folgenden fehler javascript.0 (417265) script.js.Batteriestatus.Batterieliste_VIS: ReferenceError: jsonArr is not defined
-
sorry - mein fehler - ändere das im function-block
-
vielen dank, funktioniert nun perfekt
-
Hallo Zusammen. Auch wenn der Thread älter ist, hänge ich gerade in einer nicht mehr funktionierenden Sortierung fest. Es wäre klasse, wenn Ihr Euch das mal anschauen könntet...
Folgende Situation:
Dies sind die Ausgangsdaten, die ich in einer Liste abbilde und anschließend unterschiedlich sortieren möchte:
Nach der Abbildung als Liste, liegen folgende Informationen vor:
In einem anderen Script sortiere ich bereits ähnliche Werte mit dieser Logik:
Der Wert "1" soll dazu führen, dass die Liste nach dem ersten Wert in der Klammer (EPEX Preis) sortiert wird. Im weiteren Verlauf, sollen die Daten nach dem 4. Wert sortiert werden.
Egal nach welchem Wert "0" bis "4" ich sortiere, die Ergebnisse wirken irgendwie "unsortiert".Wie gesagt... In einem anderen Skript funktioniert das. Ich finde nur die Ursache in dieser Konstellation nicht. Wobei ich zugebe, dass ich den Funktionsaufruf auch noch nicht komplett verstanden habe und mir deshalb nicht selbst helfen kann...
Anbei noch das komplette Skript
Würde mich riesig freuen, wenn Ihr mir helfen könntet. Gruß, Thomas
-
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
-