告诉错误位置的 JavaScript JSON 解析器

ste*_*pan 6 javascript parsing json

我在解析 WebSocket 接收的 JSON 时遇到了一些麻烦(原始问题 - Parse JSON received with WebSocket results in error)。JSON 字符串本身是有效的(使用多个 JSON 验证器进行测试),但 JSON.parse 会引发异常。我试图弄清楚它无法解析到底是什么,但我得到的唯一一件事是“SyntaxError:unexpected_token ILLEGAL”,它没有说明失败令牌的确切位置在哪里。有没有办法提取这些信息?

更新:如果我将该 JSON 字符串复制粘贴到静态文件(例如“data.json”),然后检索它并使用相同的函数(JSON.parse)解析它 - 那么它工作正常。所以我假设发生了一些棘手的事情,我想到了换行符(可能有 \n 而不是 \r\n ,反之亦然)但完全删除所有换行符并没有帮助。我认为这很可能是编码问题,但数据是通过 websocket 接收的,根据文档,它是 utf-8 字符串。

第二次更新:如果我从这里使用“json_parse”, 它工作得很好:https : //github.com/douglascrockford/JSON-js/blob/master/json_parse.js然后它工作正常!这是否意味着这是 Chrome 使用的“JSON.parse”实现中的错误或什么?

谢谢你。

jfr*_*d00 3

您可以从某处复制 JSON.parse() 的实现(例如从 jQuery 中复制),更改其名称,以便您可以直接调用它,调整实现,使其永远不会检测到内置解析器,因此它始终使用 JS 解析器然后更改代码以使用新的 JS 版本的解析器,然后在 javascript 调试器中跟踪它,直到找到它不喜欢的内容。