NEWS
JSON parse - ich schaffe es nicht...
-
Hallo, mit blockly schaffe ich viel, aber JS is zu schwierig...
JSON ausgabe ist
{"event":"onBatteryLevelChanged","deviceId":"1835eb40-ad9325d5","level":100}
Ich habe mehrere Versuchen gemacht und mich viele Lösungen angeschaut, aber ich kriege es nicht hin den wert level raus zu kriegen.
Script funktioniert nicht...
on({id: 'mqtt.0.fully.event.onBatteryLevelChanged.1835eb40-ad9325d5', change: "any"}, function (obj) { try {obj = JSON.parse(getState('mqtt.0.fully.event.onBatteryLevelChanged.1835eb40-ad9325d5').val); } catch (e) { console.error('Cannot parse: ' + getState('mqtt.0.fully.event.onBatteryLevelChanged.1835eb40-ad9325d5').val); return; } setState('mqtt.0.fully.event.onBatteryLevelChanged.Battery_%', obj.level); console.log(obj.level); });
Wer versteht was ich falsch mache?
Erwin -
Erstens würde ich direkt das
obj
verwenden, das deiner Funktion übergeben wird (nicht nochmals ein getState() machen).Zweitens, kannst du mal ein deiner
function (obj) {
als erstes einlog(obj.val);
machen und schauen, was da im Log ausgegeben wird? Ist es wirklich ein JSON oder sieht es anders aus? -
@UncleSam Jetzt brauche ich schon Unterstutzung... Ich kriege schon deinen Vorschlag nicht hin
-
-
@paul53 sagte in JSON parse - ich schaffe es nicht...:
@UncleSam sagte:
als erstes ein log(obj.val); machen
log(obj.state.val);
Sorry, ja richtig. Mein Fehler.
-
@UncleSam
Super, erledigtvar Read = 'mqtt.0.fully.event.onBatteryLevelChanged.1835eb40-ad9325d5' var Write = 'javascript.0.Nexus7.Battery%' on({id: Read, change: "any"}, function (obj) { try {obj = JSON.parse(getState(Read).val); } catch (e) { console.error('Cannot parse: ' + getState(Read).val); return; } setState(Write, obj.level); log(obj.level); });
-
@erwinberlin sagte in JSON parse - ich schaffe es nicht...:
getState(Read)
... kannst du noch ersetzen mit
obj.state
ersetzen, damit wird der Code noch einfacher. Wie gesagt wird inobj
bereits der gesamte State mitgeliefert.