NEWS
JSON zu Objekte
-
@kellerassel75
Schon klar, mein Script filtert ja die verpassten Anrufe heute aus. Mit der "1||" bekommst Du wieder alle, um zu kontrollieren, ob alles soweit funktioniert.
Alternativ kannst Du Dich auch selbst anrufen (nicht abheben!).@ente34
Gut! Er schreibt nun die Anrufe von heute! Das funktioniert!Aber ich wollte richtige Datenpunte - Zahlen nicht JSON!
Also:
Datenpunt letzter - caller
Datenpunt letzter - date
Datenpunt letzter - nameDatenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameFalko
-
@ente34
Gut! Er schreibt nun die Anrufe von heute! Das funktioniert!Aber ich wollte richtige Datenpunte - Zahlen nicht JSON!
Also:
Datenpunt letzter - caller
Datenpunt letzter - date
Datenpunt letzter - nameDatenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameFalko
@kellerassel75
wie bereits oben gesagt, in Zeile 19 hast Du das obj in der Hand ... -
@ente34
Gut! Er schreibt nun die Anrufe von heute! Das funktioniert!Aber ich wollte richtige Datenpunte - Zahlen nicht JSON!
Also:
Datenpunt letzter - caller
Datenpunt letzter - date
Datenpunt letzter - nameDatenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameFalko
@kellerassel75 sagte: richtige Datenpunte - Zahlen nicht JSON!
Du meinst Zeichenketten?
@kellerassel75 sagte in JSON zu Objekte:
Datenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameWieweit sollen sie zurück reichen?
-
@kellerassel75 sagte: richtige Datenpunte - Zahlen nicht JSON!
Du meinst Zeichenketten?
@kellerassel75 sagte in JSON zu Objekte:
Datenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameWieweit sollen sie zurück reichen?
@paul53
Ich denke 4 Anrufe sollte reichen! -
Hallo.
Ich bin Falko und habe schon eine Menge Zeit hier verbracht.Ich bin vor einem Jahr von FHEM zu ioBroker gewechselt. Die Umstellung hat eine Weile gedauert.
Mit Blockly komme ich schon ganz gut zurecht. Java ist schwer für mich.Ich versuche aus einer JSON Tabelle Werte in Objekte zu schreiben.
Einige Beispiele aus diesem Forum konnte ich ganz gut nachstellen bei mir.
Aber mit meiner Tabelle funktioniert das alles nicht.Hier mal meine JSON:
[{"id":4097,"type":"2","caller":"****","called":"SIP: ****","callednumber":"****","name":"","numbertype":"sip","device":"","port":"-1","date":"23.01.21 23:01","duration":"0:00","count":"","path":"","sym":"x","external":"*****"},{"id":4096,"type":"2","caller":"******","called":"SIP: ****","callednumber":"*******","name":"","numbertype":"sip","device":"","port":"-1","date":"23.01.21 22:21","duration":"0:00","count":"","path":"","sym":"x","external":"******"},{"id":4083,"type":"2","caller":"*****","called":"SIP: *****","callednumber":"****","name":"","numbertype":"sip","device":"","port":"-1","date":"21.01.21 11:38","duration":"0:00","count":"","path":"","sym":"x","external":"******"}]Das ist die JSON von tr-064. Dort möchte ich gerne die caller, date und name in Objekte schreiben.
Solange nur ein Anruf ist:
{"id":4097,"type":"2","caller":"****","called":"SIP: ****","callednumber":"****","name":"","numbertype":"sip","device":"","port":"-1","date":"23.01.21 23:01","duration":"0:00","count":"","path":"","sym":"x","external":"*****"}Bekomme ich das hin. Sobald die"[ ]"dazu kommt und noch weitere Anrufe geht nichts.
Beispiel:
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "tr-064.0.calllists.missed.json"; var Nummer = "javascript.0.Nummer"; var Datum = "javascript.0.Datum"; var Name = "javascript.0.Name"; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(Nummer, parseFloat(obj.caller)); setState(Datum, parseFloat(obj.date)); setState(Name, parseFloat(obj.name)); });Wer kann helfen dass meine Objekte (jeder Anruf einzeln) erstellt werden.
Vielen Dank!
Falko@kellerassel75 sagte: Solange nur ein Anruf ist:
Ist es wirklich so, dass es dann nur ein Objekt ohne Array-Klammern ist ?
-
@kellerassel75 sagte: Solange nur ein Anruf ist:
Ist es wirklich so, dass es dann nur ein Objekt ohne Array-Klammern ist ?
@paul53
Nein das habe ich so geändert! -
@paul53
Nein das habe ich so geändert!Kannst Du es dann selber erweitern?
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "tr-064.0.calllists.missed.json"; var Nummer = "javascript.0.Nummer"; var Datum = "javascript.0.Datum"; var Name = "javascript.0.Name"; const MaxAnrufe = 4; on(json, function(dp) { var obj = JSON.parse(dp.state.val); const i_end = obj.length < MaxAnrufe ? obj.length : MaxAnrufe; for (let i=0; i<i_end; i++) { const o = obj[i]; console.warn(o); const dp_nummer = Nummer+"_"+i; console.warn(dp_nummer); setState(dp_nummer,o.caller); } // setState(Nummer, parseFloat(obj.caller)); // setState(Datum, parseFloat(obj.date)); // setState(Name, parseFloat(obj.name)); }); for (let i=0; i<MaxAnrufe; i++) { const dp_nummer = Nummer+"_"+i; createState(dp_nummer); } -
Kannst Du es dann selber erweitern?
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "tr-064.0.calllists.missed.json"; var Nummer = "javascript.0.Nummer"; var Datum = "javascript.0.Datum"; var Name = "javascript.0.Name"; const MaxAnrufe = 4; on(json, function(dp) { var obj = JSON.parse(dp.state.val); const i_end = obj.length < MaxAnrufe ? obj.length : MaxAnrufe; for (let i=0; i<i_end; i++) { const o = obj[i]; console.warn(o); const dp_nummer = Nummer+"_"+i; console.warn(dp_nummer); setState(dp_nummer,o.caller); } // setState(Nummer, parseFloat(obj.caller)); // setState(Datum, parseFloat(obj.date)); // setState(Name, parseFloat(obj.name)); }); for (let i=0; i<MaxAnrufe; i++) { const dp_nummer = Nummer+"_"+i; createState(dp_nummer); }@ente34
Danke! Ich werde es Versuchen! -
@paul53
Nein das habe ich so geändert!@kellerassel75 sagte: 4 Anrufe sollte reichen!
Vorschlag (nicht getestet):
const idJson = "tr-064.0.calllists.missed.json"; const path = "0_userdata.0.Telefon.verpasst-"; if(!existsState(path + '0.Nummer')) { for(let i = 0; i < 4; i++) { createState(path + i + '.Nummer', '', {type: 'string', name: 'Nummer', role: 'info'}); createState(path + i + '.Datum', '', {type: 'string', name: 'Datum, Uhrzeit', role: 'info'}); createState(path + i + '.Name', '', {type: 'string', name: 'Name', role: 'info'}); } } on(idJson, function(dp) { let arr = JSON.parse(dp.state.val); let anzahl = arr.length; if(anzahl > 4) anzahl = 4; for(let i = 0; i < anzahl; i++) { setState(path + i + '.Nummer', arr[i].caller, true); setState(path + i + '.Datum', arr[i].date, true); setState(path + i + '.Name', arr[i].name, true); } }); -
@kellerassel75 sagte: 4 Anrufe sollte reichen!
Vorschlag (nicht getestet):
const idJson = "tr-064.0.calllists.missed.json"; const path = "0_userdata.0.Telefon.verpasst-"; if(!existsState(path + '0.Nummer')) { for(let i = 0; i < 4; i++) { createState(path + i + '.Nummer', '', {type: 'string', name: 'Nummer', role: 'info'}); createState(path + i + '.Datum', '', {type: 'string', name: 'Datum, Uhrzeit', role: 'info'}); createState(path + i + '.Name', '', {type: 'string', name: 'Name', role: 'info'}); } } on(idJson, function(dp) { let arr = JSON.parse(dp.state.val); let anzahl = arr.length; if(anzahl > 4) anzahl = 4; for(let i = 0; i < anzahl; i++) { setState(path + i + '.Nummer', arr[i].caller, true); setState(path + i + '.Datum', arr[i].date, true); setState(path + i + '.Name', arr[i].name, true); } }); -
@kellerassel75 sagte: 4 Anrufe sollte reichen!
Vorschlag (nicht getestet):
const idJson = "tr-064.0.calllists.missed.json"; const path = "0_userdata.0.Telefon.verpasst-"; if(!existsState(path + '0.Nummer')) { for(let i = 0; i < 4; i++) { createState(path + i + '.Nummer', '', {type: 'string', name: 'Nummer', role: 'info'}); createState(path + i + '.Datum', '', {type: 'string', name: 'Datum, Uhrzeit', role: 'info'}); createState(path + i + '.Name', '', {type: 'string', name: 'Name', role: 'info'}); } } on(idJson, function(dp) { let arr = JSON.parse(dp.state.val); let anzahl = arr.length; if(anzahl > 4) anzahl = 4; for(let i = 0; i < anzahl; i++) { setState(path + i + '.Nummer', arr[i].caller, true); setState(path + i + '.Datum', arr[i].date, true); setState(path + i + '.Name', arr[i].name, true); } });@paul53
Danke passt!Echt Super! Ich bin begeistert! Danke an alle!
Ich hätte nicht gedacht das ich so schnell Hilfe bekomme!
Ihr seid Super! Macht weiter so!:clap:
Ich werde hier noch viel lernen hoffe ich!
:grinning:
Falko