NEWS
[gelöst] Javascript Objekte Zugriff
-
Der Durchlauf und die Verarbeitung hat 500ms gedauert.
-
var obj = JSON.parse(json); for(var index in obj) { // var indexObj = JSON.stringify(obj); if (/^fullcalendar/gi.test(index)) { log(index); log(JSON.stringify(obj[index])); } } ```` `
Das Erzeugen des riesigen Objektes per JSON.parse(json) würde ich sparen (Speicherbedarf !) und die IDs folgendermassen ermitteln:
var pos = 0; do { pos = json.indexOf('fullcalendar.0.20', pos + 60); var id = json.substr(pos, 35); if(id.indexOf('pos') == -1 && id.length == 35) { log(id); // Hier kann mit getObject(id) die Auswertung erfolgen } } while(pos != -1);
Wenn man die ID hat, kommt man mit getObject(id) an alle Eigenschaften.
-
Dann kommt aber leider die Fehlermeldung
TypeError: json.substr is not a function
Edit:
Habs jetzt hinbekommen anscheinend ist 'json' ein Objekt und kein String. (Stimmt das ?)
Deshalb hab ichs jetzt mal so probiert (php Kentnisse sei Dank :D)
json.toString().substr
Und es geht
-
Bei mir funktioniert https://wiki.selfhtml.org/wiki/JavaScript/Objekte/String/substr.
-
anscheinend ist 'json' ein Objekt und kein String. (Stimmt das ?) `
Nein, json ist ein String. Die Datei objects.json enthält einen JSON-String.Hast Du die Datei eingelesen ?
const datei = "/opt/iobroker/iobroker-data/objects.json";
-
Ja wobei bei mir ein Rechteproblem auftritt
Welche Rechte muss ich den geben ?
Selbst mit chmod 777 gehts nicht
-
Ja wobei bei mir ein Rechteproblem auftritt `
Ich vermute das Problem eher dadurch, dass die Datei durch ioBroker geöffnet ist. -
Die Fehlermeldung lautet aber:
Error: Permission denied May not read /opt/iobroker/iobroker-data/objects.json
-
Die Fehlermeldung lautet aber: `
Vielleicht hat node.js fs ein Problem mit der Dateiendung .json ?Unter Windows habe ich mal die Datei kopiert und dann die Kopie eingelesen, was funktioniert
exec('copy C://Program Files//ioBroker//iobroker-data//objects.json G://opt//iobroker//iobroker-data//objects.test'); const datei = "G://opt//iobroker//iobroker-data//objects.test";
Und Du hast recht: Man muss .toString() anwenden
json = json.toString(); var pos = 0; do {
-
Wenn ich die Datei kopiere und umbenenne in z.B nur "obj.json" im gleichen Verzeichnis, dann funktioniert das ganze
Macht irgendwie keinen Sinn, wiee ich finde
Edit:
Diese Funktion gibt den Fehler aus:
mods.fs.readFile = function () { if (mods.path.normalize(arguments[0]).replace(/\\/g, '/').indexOf('-data/objects.json') !== -1) { if (adapter) { adapter.log.error('May not read ' + arguments[0]); } else { console.error('May not read ' + arguments[0]); } throw new Error('Permission denied'); } return mods.fs._readFile.apply(this, arguments); };
Die if-Abfrage prüft ob der angegebene Pfad '-data/objects.json' enthält, dass ist anscheinend nicht gewollt ?
Gruß Finn
Edit2: habs gelöst. Ich kopiere einfach die Datei in eine obj.json und lese dann diese aus.
Vielen Dank für eure Hilfe