Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.3k Beiträge

NEWS

  • Wann ist ein nach der Erzeugung dp verfügbar?

    16
    0 Stimmen
    16 Beiträge
    794 Aufrufe
    mcm1957M
    @ben1983 OK - Für Javascript im Javascript Adapter gelten tw. andere Regeln. Wenn Unetrscheide allerdings eher verwirrend sind und aufwärtskompatibel anpassbar scheinen dann macht es ev. durchaus Sinn ein Issue zu erstellen. Bluefox migriert den Javascritp adapter meines Wissens nach z,Z zu Typescript. Da kann man ggF kompatible (!) Anpassungen durchaus vornehmen. Aber das müssen die Maintainer entscheiden.
  • [gelöst] History per script auslesen: Wie warten auf Daten?

    10
    0 Stimmen
    10 Beiträge
    767 Aufrufe
    D
    @ticaki Super. Das scheint zu funktionieren. Besten dank!
  • [gelöst] Einlesen eines Arrays in Javascript klappt nicht

    34
    0 Stimmen
    34 Beiträge
    2k Aufrufe
    T
    @ben1983 ich kannte \z nicht mal. Hab Chatgpt gefragt ohne Javascript zu erwähnen und der meint dazu [image: 1740782213318-bildschirmfoto-2025-02-28-um-23.36.48.png]
  • Wert einer URL auf eine URL von Shelly schreiben

    1
    0 Stimmen
    1 Beiträge
    154 Aufrufe
    Niemand hat geantwortet
  • Scrypt schaltet in Software aber nicht Physisch

    4
    0 Stimmen
    4 Beiträge
    295 Aufrufe
    P
    @geschild Oh ja Danke das funktioniert.
  • PAJ GPS abfragen

    127
    0 Stimmen
    127 Beiträge
    15k Aufrufe
    D
    @negalein gerne.. der Support ist äußerst Infomationsfreudig
  • controller.js frist Ram und javascript.X bei >90%

    14
    1
    0 Stimmen
    14 Beiträge
    964 Aufrufe
    CodierknechtC
    @tasuanetrukiat sagte in controller.js frist Ram und javascript.X bei >90%: da ich das mit den Blockly Skripten noch nicht vollständig verstanden habe Lesestoff: https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps Ganz wichtig: "Trigger in Trigger" - nicht machen, niemals, never ever!
  • [Skript] Atlantic Wärmepumpe über Cozytouch abfragen

    107
    3 Stimmen
    107 Beiträge
    19k Aufrufe
    Samson71S
    @ricki-1337 sagte in [Skript] Atlantic Wärmepumpe über Cozytouch abfragen: genannten Platine in HA einbinden. Falsches Forum? Wir sind hier bei ioBroker, nicht bei HA. Du solltest Dich mit der Fragestellung an das HA-Forum wenden und/oder ggf. auf GitHub nachfragen.
  • zig gleiche Einträge in JS-Protokollanzeige

    18
    3
    0 Stimmen
    18 Beiträge
    913 Aufrufe
    OliverIOO
    @ticaki ja, hab gerade ausprobiert. dann ist das relativ neu. das war früher nicht so. da gab es immer wieder fälle, das sich das aufmultipliziert hat
  • HttpGet Balkonkraftwerk => Nachts Errors in Protokoll

    14
    1
    0 Stimmen
    14 Beiträge
    1k Aufrufe
    O
    @fichtenmoped82 , bei einer ähnlichen Fragestellung habe ich den Radar Adapter zu Hilfe genommen. Damit können Geräte (der WR in Deinem Fall) auf Anwesenheit überwacht werden. Dann kannst Du die HTTP Abfrage gegen den WR nur ausführen, wenn Radar für den WR ein „true“ in den zugehörigen DP schreibt. In etwa so, wie @MartinP weiter oben schreibt, nur ohne Ping. Spart neben den Log Einträgen auch noch Rechenleistung -;) Gruß
  • Cannot redeclare block-scoped variable

    36
    0 Stimmen
    36 Beiträge
    3k Aufrufe
    H
    @oliverio hast Recht. Hätte gleich ein paar Hardcopys machen sollen.
  • [gelöst] Bug in Javascript?

    17
    1
    0 Stimmen
    17 Beiträge
    964 Aufrufe
    I
    @haus-automatisierung Nein, der Adapter kann nichts dafür, der DP ist string. Ich hab den mal gelöscht und beim wiedererstellen hab ich das offenbar nicht wieder auf bool geändert.
  • MS-SQL Daten in State schreiben

    13
    0 Stimmen
    13 Beiträge
    765 Aufrufe
    B
    @paul53 Try´n Error hats gebracht....Total simpel when man SQL Coden kann :grinning: ich kanns jedenfalls nicht. +1 Tag (+1 an der Stelle im Skript einfügen) 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+1', function (result) { 2 Tage 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+2', function (result) { Edit: Ich versuche gerade das Skript nach einem Zeitplan auszuführen, bekomme es aber irgenwie nicht hin. Habe oben rechts über die Uhr sowohl den Wizard, als auch Einfach versucht. Zum test auch jede Minute. Tut sich aber nichts. Ich hab auch versucht den javascript Adapter alle Minute neuzustarten....Das klappt ist aber nicht ganz Sinn der Sache. (Denke ich) Hat jemand eine Idee? '{"time":{"exactTime":true,"start":"01:00"},"period":{"days":1,"dows":"[1, 2, 3, 4, 5]"}}' sendTo('sql.0', 'query', 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) { if (result.error) { console.error(result.error); } else { // show result console.log('Rows: ' + JSON.stringify(result.result)); setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YY'), true); setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true); } }); @paul53 hast du mir hier ein Tipp?
  • getIDs() Funktion nicht verfügbar

    12
    0 Stimmen
    12 Beiträge
    643 Aufrufe
    haus-automatisierungH
    @kamikaze Habs mal angepasst: https://github.com/ioBroker/ioBroker.javascript/pull/1829
  • Shellypw/ mqtt einstellungen ändern.

    1
    0 Stimmen
    1 Beiträge
    101 Aufrufe
    Niemand hat geantwortet
  • [gelöst] Axios implementieren

    14
    1
    0 Stimmen
    14 Beiträge
    644 Aufrufe
    T
    @ben1983 Ja, aber wie oben geschrieben,wenn du den wled adapter von mir nimmst, gibt es einen State in dem du das Json rein wirst und es wird dann über die websocket verbindung vom wled adapter versendet: https://github.com/ticaki/ioBroker.wled Die PR ist ist beim Dutchman eingereicht, mal sehen wann er es added. mich hats genervt das "an" "helligkeit" "preset" in 3 Stufen ausgeführt wird... Deshalb nen State eingebaut dem ich dann so die Daten übergebe: setState(`${light.id}.action`, JSON.stringify({ "bri": bri, "on": lOn, 'ps': cArray[2], 'transition': 1 })) Das sollte auch für Steuerung von einzelnen LED's gut sein.
  • Fenster offen Script

    11
    0 Stimmen
    11 Beiträge
    795 Aufrufe
    T
    ich würde ja in so Skripts noch ein schedule('1 1 * * *', () => {startScript(name);} einbauen - dann braucht man auch nicht ans neustarten zu denken, wenn man 6 Monate später mal nen Sensor austauscht :)
  • Skript PING

    15
    1
    3 Stimmen
    15 Beiträge
    1k Aufrufe
    E
    ich habe aber generell noch eine Frage zu dem script. Ich habe daraus jetzt 3 script gemacht. Da ich Kameras, Lan und Wlan einzeln angezeigt bekommen möchte. Die funktionieren auch Alle soweit ich würde gerne daraus ein script machen. Datenpunkte werden dann auch Alle richtig angelegt. Was ich nicht hinbekommen ist die Ping Abfrage Momentan ist da so meine Einstellungen //Version 1.0.0 - 04.10.2024 //Ersteller Ro75. //https://forum.iobroker.net/topic/77249/skript-ping //Voraussetzungen (Version 1.0.0 getestet mit) //NodeJS: 20.x //Javascript-Adapter: 8.7.6 //Admin-Adapter: 7.0.23 //JS-Controller: 6.0.11 //https://forum.iobroker.net/topic/77249/skript-ping //"normale" Geräte ("Computer, Router, Switch, HUB, NAS, WLAN-Steckdosen, Android-Smartphone, Android-Tablet, etc.") //Amazon Echos, SKY-Geräte und diverse Konsolen (einfach probieren) funktionieren nicht. const ping = require('ping'); //Im Javascript-Adapter einzutragen (Zusätzliche NPM-Module) const sMainPathKamera = '0_userdata.0.Netzwerkgeräte-Test.Kamera.'; //zentraler Datenpunkt const sMainPathKameras = '0_userdata.0.Netzwerkgeräte-Test.Kameras'; const sMainPathLan = '0_userdata.0.Netzwerkgeräte-Test.Lan.'; //zentraler Datenpunkt const sMainPathLangeraete = '0_userdata.0.Netzwerkgeräte-Test.Lan-Geräte'; const sMainPathWlan = '0_userdata.0.Netzwerkgeräte-Test.Wlan.'; //zentraler Datenpunkt const sMainPathWlangeraete = '0_userdata.0.Netzwerkgeräte-Test.Wlan-Geräte'; //Konfiguration der abzufragenden Geräte. Geräte werden duch "Doppelpunkt" (:) getrennt. //Jedes Geräte besteht aus zwei Werten. Die Werte werden durch Komma (,) getrennt. //Links vom Komma die Bezeichnung und rechts vom Komma die IP-Adresse const cDevicePingKamera = 'Kamera-Garage,192.168.178.50'; //bitte anpassen const cDevicePingLan = 'Lan-Geraete,192.168.178.60'; //bitte anpassen const cDevicePingWlan = 'Wlan-Geraete,192.168.178.70'; //bitte anpassen //Kamera Datenpunkte anlegen function PingInitalisierungKamera(){ let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathKamera+device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathKamera+device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathKamera+device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathKamera+device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathKameras, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //Lan Datenpunkte anlegen function PingInitalisierungLan(){ let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathLan+device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathLan+device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathLan+device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathLan+device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathLangeraete, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //Wlan Datenpunkte anlegen function PingInitalisierungWlan(){ let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathWlan +device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathWlan +device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathWlan +device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathWlan +device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathWlangeraete, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //START PingInitalisierungKamera(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathKamera+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathKamera+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathKamera+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathKamera+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungLan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathLan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathLan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathLan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathLan+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungWlan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathWlan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathWlan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathWlan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathWlan+sDesc+'.Ping.status', 'ERROR', true); } } //Ping aller 10 Sekunden - kann angepasst werden - kleinerer Wert nicht empfohlen //damit das Intervall (wenn zu niedrig) nicht "gesprengt" wird: Schleife sperren und am Ende wieder freigeben let bPingSperreKamera = false; schedule('*/20 * * * * *', async function StartPing() { if (bPingSperreKamera == false) { bPingSperreKamera = true; let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreKamera = false; } }); let bPingSperreLan = false; schedule('*/30 * * * * *', async function StartPing() { if (bPingSperreLan == false) { bPingSperreLan = true; let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreLan= false; } }); //Ping aller 10 Sekunden - kann angepasst werden - kleinerer Wert nicht empfohlen //damit das Intervall (wenn zu niedrig) nicht "gesprengt" wird: Schleife sperren und am Ende wieder freigeben let bPingSperreWlan = false; schedule('*/40 * * * * *', async function StartPing() { if (bPingSperreWlan == false) { bPingSperreWlan = true; let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreWlan = false; } }); der Part ist so nicht richtig. Da bräuchte ich Hilfe //START PingInitalisierungKamera(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathKamera+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathKamera+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathKamera+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathKamera+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungLan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathLan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathLan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathLan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathLan+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungWlan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathWlan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathWlan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathWlan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathWlan+sDesc+'.Ping.status', 'ERROR', true); } } //Ping aller 10 Sekunden - kann angepasst werden - kleinerer Wert nicht empfohlen //damit das Intervall (wenn zu niedrig) nicht "gesprengt" wird: Schleife sperren und am Ende wieder freigeben let bPingSperreKamera = false; schedule('*/20 * * * * *', async function StartPing() { if (bPingSperreKamera == false) { bPingSperreKamera = true; let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreKamera = false; } }); let bPingSperreLan = false; schedule('*/30 * * * * *', async function StartPing() { if (bPingSperreLan == false) { bPingSperreLan = true; let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreLan= false; } }); //Ping aller 10 Sekunden - kann angepasst werden - kleinerer Wert nicht empfohlen //damit das Intervall (wenn zu niedrig) nicht "gesprengt" wird: Schleife sperren und am Ende wieder freigeben let bPingSperreWlan = false; schedule('*/40 * * * * *', async function StartPing() { if (bPingSperreWlan == false) { bPingSperreWlan = true; let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreWlan = false; } }); Edit: nach der ersten Pingabfrage kommt dann das javascript.0 12:35:20.027 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.028 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.028 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.029 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.029 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.051 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.051 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.053 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.053 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.054 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.054 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.077 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.078 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.079 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.080 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.081 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.081 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.102 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.103 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.104 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.104 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.106 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.106 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.136 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.137 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.138 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.138 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.139 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.140 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.197 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.197 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.198 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.198 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.199 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.200 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13)
  • Syrlex Plus 10 connect SL - App reverse engineering

    15
    1
    1 Stimmen
    15 Beiträge
    977 Aufrufe
    ?
    @tombox 1000 Dank!!!
  • Java Script - Objekt JSON

    8
    0 Stimmen
    8 Beiträge
    359 Aufrufe
    OliverIOO
    @schmidiv Da es jetzt noch nicht so deutlich da stand. Du legst einen Datenpunkt unter 0_userdata mit Typ String/Text an Den Wert kannst du mit getState und setState lesen und schreiben. Ein json Objekt das als Text vorliegt kannst du mit JSON.parse in ein Objekt umwandeln und vor dem Schreiben wieder mit JSON.stringify in Text umwandeln. Das ist einfacher wie mit getObject und extendObject zu hantieren.

781

Online

32.4k

Benutzer

81.4k

Themen

1.3m

Beiträge