NEWS
JSON.parse erzeugt kein gültiges Array
-
Hallo an alle Scriptexperten,
ich bekomme von einem Tasmota-ESP den im Log gezeigten JSON-String. Jedoch klappt das Parsen mit meinem Script nicht.
Könnte mir bitte jemand auf die Sprünge helfen?function onSensorChange(obj) { console.log("DS18B20: " + obj.state.val); obj.state.val=obj.state.val.replaceAll("-", "_"); let data = JSON.parse(obj.state.val); console.log("DS18B21: "+Array.isArray(data)); console.log("DS18B22: "+data.length); for (let step = 1; step < data.length; step++) { setState("0_userdata.0.DS18B20."+data[step].Id+".Wert",{val:data[step].Temperature,ack:true}); } }info DS18B20: {"Time":"2026-09-03T16:27:40","DS18B20-1":{"Id":"000000CC1680","Temperature":23.8},"DS18B20-2":{"Id":"000000CC6BDE","Temperature":24.1},"TempUnit":"C"} info DS18B21: false info DS18B22: undefinedVielen Dank im Voraus
Lutz -
Hallo an alle Scriptexperten,
ich bekomme von einem Tasmota-ESP den im Log gezeigten JSON-String. Jedoch klappt das Parsen mit meinem Script nicht.
Könnte mir bitte jemand auf die Sprünge helfen?function onSensorChange(obj) { console.log("DS18B20: " + obj.state.val); obj.state.val=obj.state.val.replaceAll("-", "_"); let data = JSON.parse(obj.state.val); console.log("DS18B21: "+Array.isArray(data)); console.log("DS18B22: "+data.length); for (let step = 1; step < data.length; step++) { setState("0_userdata.0.DS18B20."+data[step].Id+".Wert",{val:data[step].Temperature,ack:true}); } }info DS18B20: {"Time":"2026-09-03T16:27:40","DS18B20-1":{"Id":"000000CC1680","Temperature":23.8},"DS18B20-2":{"Id":"000000CC6BDE","Temperature":24.1},"TempUnit":"C"} info DS18B21: false info DS18B22: undefinedVielen Dank im Voraus
LutzEs ist auch kein Array
es ist ein Object, Erkennbar daran das es mit { beginnt und nicht mit [
Ein Object hat kein length AttributSchleife über alle Attribute in einem Object
for (const [key, value] of Object.entries(data)) { console.log(`${key}: ${value}`); }Wenn man sich das Objekt etwas besser formatiert anschaut
{ "Time": "2026-09-03T16:27:40", "DS18B20-1": { "Id": "000000CC1680", "Temperature": 23.8 }, "DS18B20-2": { "Id": "000000CC6BDE", "Temperature": 24.1 }, "TempUnit": "C" }hat das Objekt 4 Attribute
Time
DS18B20-2
DS18B20-2
TempUnitTime und TempUnit hat ein Value
die anderen 2 haben wieder ein Object
also eine weitere Ebene -
Hallo an alle Scriptexperten,
ich bekomme von einem Tasmota-ESP den im Log gezeigten JSON-String. Jedoch klappt das Parsen mit meinem Script nicht.
Könnte mir bitte jemand auf die Sprünge helfen?function onSensorChange(obj) { console.log("DS18B20: " + obj.state.val); obj.state.val=obj.state.val.replaceAll("-", "_"); let data = JSON.parse(obj.state.val); console.log("DS18B21: "+Array.isArray(data)); console.log("DS18B22: "+data.length); for (let step = 1; step < data.length; step++) { setState("0_userdata.0.DS18B20."+data[step].Id+".Wert",{val:data[step].Temperature,ack:true}); } }info DS18B20: {"Time":"2026-09-03T16:27:40","DS18B20-1":{"Id":"000000CC1680","Temperature":23.8},"DS18B20-2":{"Id":"000000CC6BDE","Temperature":24.1},"TempUnit":"C"} info DS18B21: false info DS18B22: undefinedVielen Dank im Voraus
Lutz
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden