我在websocket上监听一些数据,这些数据的格式如下:
'{"mode": "test", "code": "' + editor.getValue() + '", "testTeam": "basic"}'用户将编写一些代码,然后我们将在沙箱中运行。
当我用data = JSON.parse(message);解析数据时,如果它得到字符*星号,它就会崩溃。
有什么特别的*使它崩溃?我想只删除它们,但这会破坏代码中的用户注释。
发布于 2017-04-18 13:00:26
而不是这样:
'{"mode": "test", "code": "' + editor.getValue() + '", "testTeam": "basic"}'用这个:
JSON.stringify({mode: "test", code: editor.getValue(), testTeam: "basic"})拥有正确的JSON字符串。
可能发生的情况是,editor.getValue()包含引号或换行符,您没有正确地转义它们。
这只是猜测,因为在解析之前,您没有提供message的实际示例,但不应该直接使用字符串连接组合JSON。使用JSON.stringify()将JavaScript对象序列化为JSON。
此外,一定要将JSON.parse()和JSON.stringify()放在try/catch中,以避免在糟糕的输入上崩溃,或者使用像tryjson这样的模块为您服务:
JSON.parse()和JSON.stringify()都可以引发异常。
https://stackoverflow.com/questions/43472553
复制相似问题