Node.js Json from String?
Hey, ist es möglich mittels Node.js ein Json String aus einem String auszulesen der aber noch anderes enthält außer den Json String also z.b.
[ <user> has data: {"result":true, "count":42} ]
1 Antwort
In diesem Falle könnte man einfach den Text nehmen der von { bis } geht, und diesen dann mit JSON parsen.
Falls dein JSON-Objekt keine weiteren JSON-Objekte enthält, und im Text kein anderes { oder } vorkommt, könntest du es mit Regex machen:
const str = '[ <user> has data: {"result":true, "count":42} ]';
const jsonObject = JSON.parse(str.match(/{([^}]+)}/g));
console.log(jsonObject);
Das musst du auch nicht wissen, du musst nur wissen wo ein { ist und wo ein } ist, und dann den String von da bis da nehmen.
wie würde das gehen oder nach was müsste ich da suchen?
Okay sry weiteres Problem und zwar kommt dieser Json String ohne " an den Werten an... also in meinem fall <user> has data: {result :true, count :42}
Dann muss man sie hinzufügen.
Hab dafür einfach mal den Code von hier gestohlen: https://stackoverflow.com/questions/9637517/parsing-relaxed-json-without-eval
So sähe es dann aus:
const str = '[ <user> has data: {result:true, count:42} ]';
const jsonObject = JSON.parse(str.match(/{([^}]+)}/g)[0].replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": '));
console.log(jsonObject);
das würde funktionieren Problem sind die Kommas nach dem true, und manchmal macht er bei z.b. test: test_test einfach ein "test": test_test"
Ich nutze einfach mal aus dass hinter dem Doppelpunkt eine Leertaste ist, um zu identifizieren, ob er Teil einer Value ist (wie bei minecraft:gold_ingot) oder Teil des JSONs.
Benutze folgenden Code:
const str = 'LucnardoBooster has the following entity data: {Slot: -106b, id: "minecraft:gold_ingot", Count: 64b}';
const jsonObject = JSON.parse(str.match(/{([^}]+)}/g)[0].replace(/: /g, '": ').replace(/{/g, '{"').replace(/, /g, ', "').replace(/([0-9]+)b/g, "$1"));
console.log(jsonObject);
Das Problem ist das ich nie weiß wie lang das erste Wort ist