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

告诉错误位置的JavaScript JSON解析器,javascript,parsing,json,Javascript,Parsing,Json,我在解析WebSocket接收到的JSON时遇到了一些问题(原始问题-)。JSON字符串本身是有效的(用几个JSON验证器测试),但JSON.parse抛出异常。我试图弄清楚它到底是什么,无法解析,但我得到的唯一结果是“SyntaxError:unexpected\u token-inallec”,它没有说失败的token的确切位置在哪里。有没有办法提取这些信息 更新:如果我将该JSON字符串复制粘贴到一个静态文件(例如“data.JSON”),然后检索它并使用相同的函数(JSON.parse)

我在解析WebSocket接收到的JSON时遇到了一些问题(原始问题-)。JSON字符串本身是有效的(用几个JSON验证器测试),但JSON.parse抛出异常。我试图弄清楚它到底是什么,无法解析,但我得到的唯一结果是“SyntaxError:unexpected\u token-inallec”,它没有说失败的token的确切位置在哪里。有没有办法提取这些信息

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

第二次更新:如果我在这里使用“json_parse”,效果很好: 那就好了!这是否意味着这是Chrome使用的“JSON.parse”实现中的一个bug


谢谢。

详细信息不多,但可能是您的验证程序正在进行非严格解析,而您的javascript可能正在进行严格解析…

我认为您不需要调用JSON.parse:

JSON.parse({"key": "whatever"}) // Syntax Error ILLEGAL
因为它已经是一个对象了。我还希望看到以下代码的结果:

eval("(" + json + ")");


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

要检查的一件事是JSON字符串中是否有引号和斜杠。如果是,则需要对其进行转义:

{
    "key": "i've \"quotes\" in me",
    "key2": "and \\slashes too"
}
此外,还提供了错误的确切位置

根据,字符串中不能有引号和斜杠,因此需要对其进行转义


试试看?如果不是“私有”数据,在这里发布错误的json。比jslint更好的是返回“json:good”。jsonlint说它也是有效的。甚至我把它从我的网页复制粘贴回JSON.parse——它解析字符串。请参阅“更新”。我在从WebSocket接收字符串时也面临这个问题。我的字符串就像
{“s”:\“t\”}
一样简单。删除反斜杠可以解决问题。有人能帮我吗?我通过websocket接收字符串,所以它是通过传递给“socket.onmessage”回调的事件的“data”成员进行访问的。它肯定是一个字符串,而不是一个对象(我可以在JavaScript控制台中看到它以字符串的形式出现)。eval失败,就像JSON一样。不幸的是,parse和decodeURIComponent没有帮助。我考虑了斜杠,但在字符串中没有找到任何斜杠。另外,我没有在代码中定义字符串,它是通过websocket接收的。JSONLint是否有我可以在JS代码中使用的API?理想情况下,响应应该是格式良好的(即转义引号和斜杠),但如果无法更改,则在调用
JSON.parse
之前,在javascript代码中替换字符串(转义引号/斜杠)。您可以使用JSONLint的javascript版本:似乎不是这样,我已经更新了帖子。“如果我将该JSON字符串复制粘贴到一个静态文件(例如“data.JSON”),然后检索它并使用相同的函数(JSON.parse)对其进行解析,那么它可以正常工作”谢谢!我也考虑过这一点,但不幸的是,jQuery没有自己的解析器,根据源代码,它只使用JSON.parse或eval。但是,我找到了JSON.parse源代码:它对我很有用。所以基本上,如果我使用内置的JSON.parse,它会给出一个错误,如果我从那时起使用JSON.parse实现,它就可以正常工作。我想知道这是一个错误还是什么。
{
    "key": "i've \"quotes\" in me",
    "key2": "and \\slashes too"
}