NEWS
JSON in Blockly parsen
-
Moin!
ich versuche mich gerade in Blockly einzuarbeiten und das Testprogramm soll:
von einer URL ein return-wert als json abholen (läuft)
aus dem json
{"successful": true, "timer": {"id": 1, "enabled": false, "start": "00:30", "end": "08:30", "weekdays": {"mo": true, "tu": false, "we": true, "th": false, "fr": true, "sa": false, "su": true}}}
folgende Objektstruktur machen:
Wie setzte ich das um? Vorzugsweise ausschließlich in Blockly…
Danke Euch!
Mr.Lee
-
Wie setzte ich das um? Vorzugsweise ausschließlich in Blockly…
Danke Euch!
Mr.Lee `
du moechtest also die werte hinter ma/di usw (true/false) auslesen und in die variabelen wegschreiben richtig ?
Da faellt mir nur eine loesung mit javascript ein wobei wir den JSON string als object einladen und dan die werte auslesen + setstate um die variable zu schreiben
Gr,
Dutch
-
MoiN!
Ich möchte eigentlich den json-baum komplett in die Objekte schreiben:
start -> 00:30
mo -> true
und so weiter.
Würde eigentlich (eher als Herrausforderung) gerne nur Blockly verwenden.
Den JSON-String kann ich in Blockly in ein Objekt packen (JSON nach Objekt).
Nur, wie kann ich einzelne Werte aus diedsem Objekt in Blockly wieder rausholen und einem Datenpunkt zuordnen? :?:
Also Idee war:
json holen
variable typ objekt mit json füllen
objekt.timer.start in Datenpunkt schreiben
Und genau letzteres verstehe ich in Blockly nicht….
Aber danke Dir !
Mr.Lee
P.S.: also so in der art
-
Hast Du es hinbekommen?
Hab jetzt das gleiche mit Octoprint.
{"progress": 0, "_timestamp": 1522141883, "location": "local", "path": "bridge_right.gcode"}
-
Mist stehe heute wieder vor dem Problem
-
In einem Script würde es so aussehen:
var objekt = {"progress": 0, "_timestamp": 1522141883, "location": "local", "path": "bridge_right.gcode"}; log(objekt.progress); // Ergibt 0 log(objekt._timestamp); // Ergibt 1522141883
Habe gerade mal ein bisschen im Blockly rumgesucht,.. Habe irgendwie keine Möglichkeit gefunden bestimmte Werte mit Blockly aus einem JSON/Object abzufragen..
Gruß
-
Danke für deine Hilfe. Leider komm ich vom Code nicht zurück nach Blockly.
-
Man kann nicht von Javascript nach Blockly "konvertieren"..
Du musst dann komplett dieses Script ohne Blockly bauen. Oder warten bis jemand eine Lösung mit Blockly postet.. =/
Gruß
-
Ich verstehe das alles nicht,
ich habe folgende Zeile
{"Time":"2018-05-13T09:43:21","Switch1":"ON","Distance":8.76};
daraus habe ich dann gemacht,
var objekt = {"Time":"2018-05-13T09:43:21","Switch1":"ON","Distance":8.76};
log(objekt.Time); // Ergibt 0
log(objekt._Distance); // Ergibt 1522141883
aber leider bekomme ich nirgends werte in meinem fall die 8.76
-
Es heißt auch Distance in deinem object, nicht _Distance.. Wo kommt denn der _ da her bei dir?
Gruß
-
ja danke…! Aber leider auch änderung nichts was ich noch gefunden habe ein Error
mqtt.0 2018-05-13 12:08:13.330 error Cannot parse {"Time":"2018-05-13T11:08:10","Switch1":"ON","Distance":}
momentan der COde
var objekt = {"Time":"2018-05-13T09:43:21","Switch1":"ON","Distance":8.76}; log(objekt.Time); // Ergibt 0 log(objekt.Distance); // Ergibt 1522141883
-
Wieso schmeißt mqtt den fehler? Wie sieht dein komplettes Script aus?
Bei mir funktioniert es ohne Probleme..
Gruß
-
Da ich es nicht verstehe, das ist mein Komplettes Script "duck und Weck"
-
Hallo, hatte grade auch diese Anforderung. Habe es wie folgt gelöst.
on({id: "mqtt.0.tele.SONOFF_PRUSA.SENSOR"/*tele/SONOFF_PRUSA/SENSOR*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; json = (function () { try {return JSON.parse(getState("mqtt.0.tele.SONOFF_PRUSA.SENSOR").val);} catch(e) {return {};}})(); setState("mymeta.0.3DStromkosten"/*3DStromkosten*/, Math.round((getAttr(json, 'ENERGY.Total') * getState("mymeta.0.kwhPrice").val)*100)/100, true); });
-
Hallo jnmcfly,
kannst Du mal das Blockly dazu posten bzw. den XML export. Leider bekomme ich das so nur zu 70% nachgebaut.
Danke. -
-
@xbow42 -Danke! Läuft!
-
Moin und frohes neues
Ich stehe aktuell vor einem schier unlösbaren Problem, ich muss dazu sagen, ich hab keine Ahnung von dem was ich tue also seid mir nicht böse
Ich versuche ein JSON Objekt zu parsen, soweit eigentlich kein Problem, zumindest solange ich nicht auf „body“ oder darin enthaltenes zugreifen will, auf zb. „Status“ kann ich zugreifen und den Wert auslesen.
Hier ein Beispiel JSON:
{ "body": { "homes": [ { "id": "5954e7f249c75f97428b7b23", "name": "Your House", "altitude": 89, "coordinates": [ "-0.12726409999999996, 51.51608619999999" ], "country": "FR", "timezone": "Europe/paris", "rooms": [ { "id": 3466299980, "name": "myRoom", "type": "Kitchen", "module_ids": [ "09:00:00:00:0e:e0" ] } ], "modules": [ { "id": "01:00:00:00:0e:e0", "type": "NAPlug", "name": "thermostat relay", "setup_date": 1498736626, "module_bridged": [ "02:00:00:00:0e:e0, 03:00:00:00:0e:e0" ] }, { "id": "01:00:00:00:0e:e0", "type": "NATherm1", "name": "thermostat relay", "setup_date": 1498736626, "room_id": 2016185224, "bridge": "01:00:00:00:0e:e0" }, { "id": "01:00:00:00:0e:e0", "type": "NRV", "name": "thermostat relay", "setup_date": 1498736626, "room_id": 2016185224, "bridge": "01:00:00:00:0e:e0" } ], "therm_set_point_default_duration": 180, "schedules": [ { "timetable": [ { "zone_id": 1, "m_offset": 360 } ], "zones": [ { "name": "Confort", "id": 1, "type": 1, "rooms": [ { "id": 201618522, "therm_setpoint_temperature": 15 } ] } ], "name": "mySchedule" } ], "therm_mode": "schedule" } ], "user": { "email": "user@example.com", "langage": "fr-FR", "locale": "fr-FR", "feel_like_algorithm": 0, "unit_pressure": 0, "unit_system": 0, "unit_wind": 0, "id": "5c81004fd6e33f0b008b4df2" } }, "status": "ok", "time_exec": "0.060059070587158", "time_server": "1553777827" }
Ich möchte hier auf die Liste „body.homes.modules.module_bridged“ zugreifen, am besten die Angaben zählen und dann Objekte für jede dieser ID‘s anlegen.
Hat den Hintergrund, dass ich versuche ein blocky zu bauen, welches wie ein Adapter ready to use für jedermann einsetzbar ist, bin auch soweit das Objekte automatisch angelegt werden wenn nicht vorhanden und hier nur Zugangsdaten in Objekte eingetragen werden müssen und automatisch oauth2 Tokens angefordert und aktualisiert werden, womit dann bereits zwei JSON Objekte aus der API geholt und angelegt werden.
Zum einen wird schon seit Jahren nach einem Adapter von x Personen gebeten und zum anderen lerne ich so eine Menge dazu!Ich hoffe mir kann hier jemand helfen, danke im Voraus
Edit: mir ist klar, dass dieses JSON mit Arrays verschachtelt ist, jedoch liegt genau hier mein Problem, wie muss ich die richtig parsen?
Mir fehlt einfach die richtige Formulierung des Pfades, habe es auch mit [] eckigen Klammer oder Klammer und einer null [0] für das erste Array probiert, komme hier aber leider überhaupt nicht weiter
Auch im netzt und hier im Forum konnte ich bisher nichts finden, was mir weiterhelfen würde. -
@newpicsel Versuche es mal mit "modules.module_bridged" und dann einen "in der Liste (DEIN ATTRIBUT VOM OBJEKT BLOCK) nimm entweder "erstes" oder "letztes" - je nach dem welchen Wert du möchtest.
-