您说服务器正在返回 JSON(省略引号):
{\"data\":[], \"SkipToken\":\"\", \"top\":\"\"}
这是无效的 JSON。 JSON 中围绕字符串和属性名称的引号应该not前面有一个反斜杠。 JSON 中的反斜杠严格用于插入双引号inside一个字符串。 (它也可以用于转义字符串中的其他字符,但这与这里无关。)
正确的 JSON 是:
{"data":[], "SkipToken":"", "top":""}
如果您的服务器返回此内容,它将正确解析。
这里的混乱以及其他发帖者的报告认为您的字符串应该可以工作,其原因在于在一个简单的测试中,我在控制台中输入了这个字符串:
var x = "{\"data\":[], \"SkipToken\":\"\", \"top\":\"\"}";
the JavaScript 字符串转义机制,这与 JSON 中转义符的使用完全不同,会产生一个带有值的字符串
{"data":[], "SkipToken":"", "top":""}
当然 JSON.parse 可以很好地处理。但是 Javascript 字符串转义适用于源代码中的字符串文字,而不是来自服务器的内容。
要修复服务器错误转义的 JSON,您有两种可能性。一种是告诉服务器人员他们不需要(也不能)在引号前添加反斜杠(引号除外)inside字符串)。然后一切都会正常。
另一种方法是在将其交给其他人之前撤消自己的转义JSON.parse
。首先是一个简单的正则表达式,例如
data.replace(/\\"/g, '"')
as in
var dataList = JSON.parse(data.replace(/\\"/g, '"')
它可能需要额外的调整,具体取决于服务器人员如何转义字符串内的引号;他们正在发送吗\"\\"\"
,或者可能\"\\\"\"
?
我无法解释为什么这段正在运行的代码突然停止运行。我最好的猜测是服务器端的更改开始转义双引号。