NEWS
[gelöst] JSON in Blockly zerlegen
-
@homoran und ich habe mich gerade gefragt wie das
[x]
rot wurde ... -
@bananajoe Das war vorher eine Checkbox. Und alles davor war weg
-
... ich hatte bereits erwähnt, dass ich "Blockly Neuland" betreten habe. Über einfache "IF ... THEN" Skripte (Sozusagen Kreisliga) bin ich (noch) nicht hinaus gekommen.
Wenn ihr Beide (Champions League) euch unterhaltet kann ich nur mit offenem Mund zuhören. Ich habe probiert der Diskussion zu folgen aber es gelingt mir nicht wirklich ... sorry.Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?!
Und: Ich habe eine Doku zu blockly ...https://hobbyblogging.de/iobroker-blockly
Die werde ich mir mal "unter das Kopfkissen" legen. Habt ihr da noch eine weitere Empfehlung ? -
@raspiuser sagte in JSON in Blockly zerlegen:
Wenn ihr Beide (Champions League)
Danke für die Blumen, aber ich bin auch nur ein einfacher User (vielleicht extended Mode)
Dann nimm mal deine Antwort (result) und kopiere sie bei http://jsonviewer.stack.hu/ rein und sieh dir mal die Struktur an.
Ich hätte das gerne für dich gemacht, aber ein Screenshot lässt sich nicht als Text kopieren@raspiuser sagte in JSON in Blockly zerlegen:
Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?!
Dein Ansatz war ja für ein reines json vollkommen richtig.
Nur ein Element (box) dieses JSON ist ein Array.Dieses musst du anders behandeln.
-
@raspiuser sagte in JSON in Blockly zerlegen:
Könnt ihr mal eine Antwort ("Kochrezept") zu meiner Frage so formulieren das ich eine Chance habe ... ?!
Und: Ich habe eine Doku zu blockly ...https://hobbyblogging.de/iobroker-blockly
Die werde ich mir mal "unter das Kopfkissen" legen. Habt ihr da noch eine weitere Empfehlung ?Das ist schon einmal ein guter Anfang. Allerdings fürchte ich das Du bei dem Verständnis weniger am Blockly und mehr an der vorhandenen Datenstruktur knabberst:
nehmen wir einfach mal das folgende Objekt:
{ "wbec": { "inhalt1":"1", "inhalt2":"2", }, "data": [ { "i1": 1, "i2":2, }, { "i1": 55, "i2":56, } ], "raw":"somerawtexthere:" }
Auf der obersten Ebene hat dieses Objekt 3 Properties, auf die du mit Namen zugreifen kannst. Das sind
wbec
,data
undraw
.Die Property
raw
ist einfach - dahinter steht nur ein Text.
Die Propertywbec
ist etwas komplexer - dieses ist wieder ein JSON Objekt mit den Propertiesinhalt1
undinhalt2
. Auf diese kannst du direkt (Attribut wbec.inhalt1 vom Objekt ...
) zugreifen. Alternativ weist du den Wert vonAttribut wbec vom Objekt ...
einer Variable zu, und nutzt dannAttribut Inhalt1 vom Objekt...
nochmal, wobei du die Variable als Objekt andockst.
Die Propertydata
ist noch eine ebene komplexer. Dabei handelt es sich um ein array - ein Feld von verschiedenen Objekten. Erkennbar ist das an[
und]
die Anfang und Ende des Arrays bezeichnen. Auf den Inhalt des Arrays kannst du nur über einen Index zugreifen. Dieser beginnt mit 0, sprich wenn die VariablemeinFeld
ein Array ist, dann istmeinFeld[0]
der erste Eintrag im Array,meinFeld[1]
dann der 2. und so weiter. In dem oben stehenden Beispiel ist also unter der Propertydata
ein Array mit 2 Einträgen eingetragen.
Problematisch ist das der BausteinAttribut ... vom Objekt ...
nur auf reines JSON angewendet werden kann. Dementsprechend funktioniertAttribut wbec.box[0].energyP ...
nicht. In so einem Fall musst du erst das Array extrahieren:
BoxArray = Attribut wbec.box vom Objekt...
um dann davon den entsprechenden Eintrag zu holen.Jetzt wird es leider hässlich. Irgendjemand hat beschlossen dass
- Arrays in Blockly als Listen geführt werden
- Listen einträge von 1 bis n haben, nicht 0 bis n-1 wie Arrays in JS.
Dementsprechend bekommst Du also deine Objekt in dem du den Baustein `aus der Liste BoxArray nimm den 1. Eintrag' nutzt.
Der Baustein mit dem du letztendlich auf das Attribut energyP kommst lautet also:
Attribut EnergyP vom Objekt
aus der Liste BoxArray nimm den 1. Eintrag
Ich habe leider aktuell keinen Zugriff auf Blockly, daher kann ich das nicht direkt als Blockly darstellen.
Ich hoffe es hat trotzdem geholfen.
A.
-
@asgothian said in JSON in Blockly zerlegen:
Ich hoffe es hat trotzdem geholfen.
UND WIE !!!!
Dank deinen ausfürhrlichen Erläuterungen konnte ich es gut nachvollziehen (ob ich es verstanden und erneut anwenden kann wird sich noch zeigen). Und mit dem Blockly-Hinweisen von @paul53 (Danke!) sieht es jetzt so aus und funktioniert.
Danke auch an @BananaJoe und @Homoran
-
@raspiuser sagte: ob ich es verstanden
Anscheinend noch nicht so richtig: Die Variable boxarray enthält kein Array, sondern ein Objekt.
-
@paul53 said in [gelöst] JSON in Blockly zerlegen:
Die Variable boxarray enthält kein Array, sondern ein Objekt.
OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?
-
@raspiuser sagte: enthält jetzt über "in der Liste..." weitere Objekte
Die Liste "box" enthält ein Objekt, weshalb ich die Variable mit box1 (1. Element der Liste) bezeichnet hatte.
Ein Objekt enthält mehrere Attribute, auf die über ihren Bezeichner (z.B. "energyP") zugegriffen werden kann. -
@raspiuser sagte in [gelöst] JSON in Blockly zerlegen:
@paul53 said in [gelöst] JSON in Blockly zerlegen:
Die Variable boxarray enthält kein Array, sondern ein Objekt.
OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?
Prinzipiell, ja. Besser wäre aber die Konstruktion so:
Sprich so wie @paul53 es geschrieben hat.
Das verstehst du dann auch in einem Jahr noch.
-
OK, aber dieses Objekt enthält jetzt über "in der Liste..." weitere Objekte die ich mit "Attribut ... vom Objekt" auslesen kann, so richtig ?
Das Array wird über "in der Liste..." in ein Objekt zerlegt und enthält die Attribute, die ich mit "Attribut ... vom Objekt" auslesen kann.
So richtig formuliert ? -
@asgothian said in [gelöst] JSON in Blockly zerlegen:
Das verstehst du dann auch in einem Jahr noch.
Schaun'mer mal ... aber wie immer ... es gibt verschiede Lösungswege
-
@raspiuser sagte: Das Array wird über "in der Liste..." in ein Objekt zerlegt
Über "in der Liste ..." wird das erste Element des Arrays referenziert. Das erste Element des Arrays ist ein Objekt.
-
Noch eine Lösung ...