NEWS
Json oder xml in Blockly nutzen
-
Hallo,
lese meine PV Analage über eine url-request aus, und bekomme entweder ein json- oder xml-Format als Antwort. Damit kann ja aber nicht direkt in Blockly arbeiten. Ich hab schonmal versucht die Suche zu bemühen, aber ich habe nicht das richtige gefunden. Da ich kein Javascript kann, würde ich gerne soweit wie möglich alles in Blockly machen.
Ich hab mal was gelesen, das man das parsen müsste, aber da habe ich leider keine Ahnung wie das gehen soll. Nachfolgend poste ich mal die Antwort, die ich von der PV Anlage bekomme. Ich möchte eigentlich nur den Zahlenwert "3657.0" in eine Variable schreiben, damit ich damit weiterarbeiten kann.Danke euch schonmal
-
@Paan83 sagte:
ein json- oder xml-Format als Antwort.
Das JSON-Format lässt sich leicht verarbeiten.
Den Teil zwischen energyDetails und value musst Du selbst ergänzen.
-
Den Attribut Baustein verstehe ich jetzt nicht auf anhieb.
Ich habs mal so probiert:
Wird mit dem "JSON nach Objekt" Block das Json Format schon so umgewandelt dass ich in Blockly damit arbeiten kann? Oder gehört dazu eben noch dieser Attribut Block?
Wie man auf dem Screenshot sieht, gibt er mir nur zwei Klammern zurück -
@Paan83 sagte:
Wird mit dem "JSON nach Objekt" Block das Json Format schon so umgewandelt dass ich in Blockly damit arbeiten kann?
Ja.
@Paan83 sagte in Json oder xml in Blockly nutzen:
gehört dazu eben noch dieser Attribut Block?
Damit greift man auf ein Attribut des Objektes zu.
@Paan83 sagte in Json oder xml in Blockly nutzen:
gibt er mir nur zwei Klammern zurück
Die Wandlung und weitere Verarbeitung muss innerhalb (Callback-Funktion) von request erfolgen.
-
@paul53 Super!! Vielen Dank!! Jetzt klappt es
-
@paul53 Ich hab das Ergebnis jetzt versucht mit den Textbausteinen auseinanderzupflücken um den Zahlenwert zu isolieren, aber da bekomme ich direkt eine Fehlermeldung. Geht das nicht damit?
-
@Paan83 sagte:
das Ergebnis jetzt versucht mit den Textbausteinen auseinanderzupflücken um den Zahlenwert zu isolieren
?? Das Attribut "energyDetails.meters[0].values[0].value" sollte direkt den Zahlenwert liefern (als Zahl).
Poste mal die komplette JSON-Ausgabe in Code tags, dann kann ich es testen.
-
@paul53 sorry komme heute nicht mehr an den Rechner. Ich würde nur gern verstehen was dieser Attribut-Block macht?
-
@Paan83 sagte in Json oder xml in Blockly nutzen:
@paul53 sorry komme heute nicht mehr an den Rechner. Ich würde nur gern verstehen was dieser Attribut-Block macht?
im json ist ähnlich deinem XML immer ein Feld mit namen und dazu ein zweites Feld mit Wert.
Dieser Wert ist das Attribut des Namens -
Ich habs mal genauso gemacht wie @paul53 es gezeigt hat, und leider ist das Resultat: undefined!
-
@Paan83
Hast du das gemacht?@paul53 sagte in Json oder xml in Blockly nutzen:
Poste mal die komplette JSON-Ausgabe in Code tags, dann kann ich es testen.
ich habe es nicht gefunden.
Hast du mal mit debug Blöcken nachgesehen, was bei den Schritten passiert?
-
-
Ja sorry hab das Skript jetzt geändert. Jetzt kommt null dabei heraus.
Beim ersten Debug Result kommt ja das Richtige dabei raus. Was könnte ich noch debugen?
@Homoran sagte in Json oder xml in Blockly nutzen:
Poste mal die komplette JSON-Ausgabe in Code tags, dann kann ich es testen.
Soll ich das Skript einfach exportieren und hier posten? Sorry aber ich verstehe nicht ganz was JSON-Ausgabe in Code Tags bedeuten soll
-
@Paan83 sagte in Json oder xml in Blockly nutzen:
Sorry aber ich verstehe nicht ganz was JSON-Ausgabe in Code Tags bedeuten soll
dann bitte fragen, wenn man darum gebeten wird und nicht weiß was das ist!"
Du bekommst im ersten debug das json als result
Das hätte paul gerne. in Code-Tags, das ist das 5. Icon über dem Textfeld. -
@Paan83 sagte in Json oder xml in Blockly nutzen:
was JSON-Ausgabe in Code Tags bedeuten soll
Die Log-Ausgabe mit dem JSON kann per Copy & Paste in das Forum übertragen werden, wobei sie möglichst innerhalb von Code tags (5. Symbol oben: </>) gepostet werden sollte.
-
@Homoran sagte in Json oder xml in Blockly nutzen:
dann bitte fragen, wenn man darum gebeten wird und nicht weiß was das ist!"
Ja ok, bitte entschuldige mich.
29.2.2020, 18:24:20.103 [info ]: javascript.0 (14774) script.js.Skripte.Solaredge.API_per_Blockly_auslesen: {"energyDetails":{"timeUnit":"DAY","unit":"Wh","meters":[{"type":"Production","values":[{"date":"2020-02-29 00:00:00","value":16029.0}]}]}} 29.2.2020, 18:24:20.104 [info ]: javascript.0 (14774) script.js.Skripte.Solaredge.API_per_Blockly_auslesen: {'energyDetails':{'timeUnit':'DAY','unit':'Wh','meters':[{'type':'Production','values':[{'date':'2020-02-29 00:00:00','value':16029}]}]}}
Ich hoffe das ist das Richtige?
-
-
@Paan83
Offenbar kann getAttr() nicht mit Arrays umgehen. Dann muss man das etwas aufwändiger gestalten: -
@paul53 1000 Dank! Jetzt ist die Zahl da
-
Sorry wenn ich nochmal störe. Ich habe versucht die Zahl in einen Datenpunkt zu schreiben, aber das funktioniert nicht. Muss ich hier nochmal was umwandeln?
29.2.2020, 23:47:42.332 [info ]: javascript.0 (14774) Start javascript script.js.Skripte.Solaredge.API_per_Blockly_auslesen 29.2.2020, 23:47:42.338 [info ]: javascript.0 (14774) script.js.Skripte.Solaredge.API_per_Blockly_auslesen: registered 0 subscriptions and 1 schedule 29.2.2020, 23:47:50.094 [info ]: javascript.0 (14774) script.js.Skripte.Solaredge.API_per_Blockly_auslesen: 18365 29.2.2020, 23:47:50.094 [warn ]: javascript.0 (14774) at Request._callback (script.js.Skripte.Solaredge.API_per_Blockly_auslesen:11:5)