NEWS
Ersten Eintrag aus JSON entfernen
-
Hallo. Wie kann ich aus einem Json-Datenpunkt den ersten Eintrag entfernen.
Mein Json schaut so aus:
Nun möchte ich z.B. das um 13 Uhr der erste Eintrag wo das Feld Zeit-beginn auf 13:00 steht, entfernt wird, um 14 Uhr dann wieder usw.
Geht das mit einem Blockly? -
@manfredhi sagte: den ersten Eintrag entfernen.
Wozu?
-
@paul53 sagte in Ersten Eintrag aus JSON entfernen:
Wozu?
Soll immer mit der gerade aktuellen STunde beginnen.
-
@manfredhi sagte: Soll immer mit der gerade aktuellen STunde beginnen.
Das kann man dort berücksichtigen, wo das JSON ausgewertet wird.
-
-
@mickym
Es funktioniert. DANKE. nur ich versteh diese Syntax im JSONata Ausdruck überhaupt nicht. -
@mickym
noch eine Frage dazu: Was muss ich machen, wenn z.B. aus irgendeinem Grund das Script nicht gelaufen ist und dann z.B. nicht nur der Eintrag 0 sondern auch der nächste z.b. entfernt werden muss. Geht das mit einer Schleife oder so? -
@manfredhi Na Du kannst es auch ohne JSONATA machen - wird halt nur umständlicher.
Wenn du es ohne JSONATA machst, dann musst Du auch aus dem ganzen ein Objekt machen.
Aus diesem Objekt weist Du einer neuen Liste das Attribut data zu.
Aus dieser Liste ermittelst Du die Anzahl Elemente
Dann nimmst Du aus dieser Liste eine Teilliste vom 2. bis zur Anzahl Elemente.
Dann wandelst Du das wieder in einen String und setzt "{'data':" + String + "}" dahinter. Dann hast Du in etwa das was wir in JSONATA gemacht haben.Ansonsten muss man es halt lernen.
https://try.jsonata.org/R0PG0QFimfangen wir von Anfang an
mit dem $ beziehst Du Dich auf das Ausgangobjekt. Also den Inhalt der Variable objekt.
-
@manfredhi Ja kannst Du machen - mit jedem Durchlauf wird das 1. Element entfernt. Oder Du kannst direkt mehrere Objekte entfernen in dem Du die Bedingung des Filters änderst.
Mit $i>1 wird das 0. und das 1. Element entfernt - in JS oder JSONATA beginnt man immer mit 0 zu zählen.
-
@mickym sagte in Ersten Eintrag aus JSON entfernen:
@manfredhi Na Du kannst es auch ohne JSONATA machen - wird halt nur umständlicher.
Wenn du es ohne JSONATA machst, dann musst Du auch aus dem ganzen ein Objekt machen.
Aus diesem Objekt weist Du einer neuen Liste das Attribut data zu.
Aus dieser Liste ermittelst Du die Anzahl Elemente
Dann nimmst Du aus dieser Liste eine Teilliste vom 2. bis zur Anzahl Elemente.
Dann wandelst Du das wieder in einen String und setzt "{'data':" + String + "}" dahinter. Dann hast Du in etwa das was wir in JSONATA gemacht haben.Ansonsten muss man es halt lernen.
https://try.jsonata.org/R0PG0QFimfangen wir von Anfang an
mit dem $ beziehst Du Dich auf das Ausgangobjekt. Also den Inhalt der Variable objekt.
Weiter $ beziehst Du Dich also auf das Ausgangsobjekt:
mit $.data selektierst Du nun das Array das Dich interessiert:
mit #$i setzt Du eine Variable, das Dir den Index zu jedem Element enthält
Nachdem wir nun eine Variable $i haben - können wir die Elemente herausfiltern, die uns interessieren. Also alle deren Index >0 sind.
Einen Filter definiert man einfach in eckigen Klammern:
Nun haben wir also das erste Element bereits entfernt. Das Ergebnis wollen wir aber wieder, wie das Ausgangsobjekt in einem Objekt mit der Eigenschaft "data" habe. Also brauchen wir das nur drum rum zu schreiben bei JSONATA und das wars schon.
Damit wurde die ganze Magie schon erklärt.
Wie gesagt, wie es ohne JSONATA gehen kann, habe ich hier kurz angerissen: https://forum.iobroker.net/post/1102736
Solange es aber bei den Puzzleteilchen kein Teil gibt mit dem man Objekte erzeugen kann, ist das hoffnungslos umständlich.
-
Vielen Dank @mickym werd das jetzt mal genauer studieren und probieren.
-
Hätte noch eine Frage zu den Schleifen: Immer wenn ich die Schleifen "wiederhole solange" oder "wiederhole bis" nehme, stürtzt die Javascript instanz ab.
Wie verwendet man diese Schleifen eigentlich richtig?