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
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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);
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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.
![](https://images.gutefrage.net/media/user/Lucnardo/1618078909039_nmmslarge__59_0_448_449_91f3527c1c9a8cd11e26aa675e405f03.png?v=1618078909000)
wie würde das gehen oder nach was müsste ich da suchen?
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/user/Lucnardo/1618078909039_nmmslarge__59_0_448_449_91f3527c1c9a8cd11e26aa675e405f03.png?v=1618078909000)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/user/Lucnardo/1618078909039_nmmslarge__59_0_448_449_91f3527c1c9a8cd11e26aa675e405f03.png?v=1618078909000)
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}
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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);
![](https://images.gutefrage.net/media/user/Lucnardo/1618078909039_nmmslarge__59_0_448_449_91f3527c1c9a8cd11e26aa675e405f03.png?v=1618078909000)
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"
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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);
![](https://images.gutefrage.net/media/user/Lucnardo/1618078909039_nmmslarge__59_0_448_449_91f3527c1c9a8cd11e26aa675e405f03.png?v=1618078909000)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Das Problem ist das ich nie weiß wie lang das erste Wort ist