2017-04-18 1 views
0

ich auf einem WebSocket für einige Daten hören, die in folgendem Format sein:NodeJS json_parse Absturz auf asteriks

'{"mode": "test", "code": "' + editor.getValue() + '", "testTeam": "basic"}' 

Die Nutzer werden einige Code schreiben, die wir dann in einer Sandbox ausgeführt.

Wenn ich die Daten mit data = JSON.parse(message); analysieren, stürzt es ab, wenn es das Zeichen * asterisk erhält.

Was ist das Besondere an *, das es zum Absturz bringt? Ich entferne sie nur, aber das wird Benutzerkommentare im Code zerstören.

Antwort

1

Statt dem:

'{"mode": "test", "code": "' + editor.getValue() + '", "testTeam": "basic"}' 

Verwendung dieser:

JSON.stringify({mode: "test", code: editor.getValue(), testTeam: "basic"}) 

einen korrekten JSON-String haben.

Was wahrscheinlich passiert ist, dass editor.getValue() Zitate oder Zeilenumbrüche enthält und Sie nicht richtig entkommen.

Dies ist nur eine Vermutung, weil Sie vor dem Analysieren kein aktuelles Beispiel für message angegeben haben, aber Sie sollten JSON niemals direkt mit der Verkettung von Zeichenfolgen erstellen. Verwenden Sie JSON.stringify(), um JavaScript-Objekte zu JSON zu serialisieren.

Auch setzen immer JSON.parse() und JSON.stringify() innerhalb von try/catch auf schlechten Eingang zu vermeiden abstürzt oder ein Modul wie tryjson verwenden, das tut das für Sie:

Beide JSON.parse() und JSON.stringify() kann Ausnahmen auslösen.