JSON.parse() 不工作

新手上路,请多包涵

我的服务器有一个 json,它是 -

 {"canApprove": true,"hasDisplayed": false}

我可以像这样解析 json -

 var msg = JSON.parse('{"canApprove": true,"hasDisplayed": false}');
alert(msg.canApprove);  //shows true.

在我的 ajax 响应函数中,我通过方法参数捕获了前面提到的相同 json jsonObject -

 //response function
function(jsonObject){

  //here jsonObject contains the same json -  {"canApprove":true,"hasDisplayed": false}
  //But without the surrounding single quote
  //I have confirmed about this by seeing my server side log.

  var msg = JSON.parse(jsonObject); // this gives the error

}

但现在我收到以下错误 -

SyntaxError: JSON.parse: JSON 数据第 1 行第 2 列出现意外字符

谁能告诉我为什么会出现错误?

原文由 Razib 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 712
2 个回答

如果服务器正在发送有效的 JSON,我认为您不应该调用 JSON.parse(jsonObject) ,因为它会在检索响应时自动解析。我相信,如果您设置 Content-type: application/json 标题,它将被自动解析。

尝试使用 jsonObject 就好像它已经被解析过一样,类似于:

 console.log(jsonObject.canApprove);

没有调用 JSON.parse 之前。

原文由 taxicala 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的 JsonObject 似乎是一个 Json 对象。无法从字符串中解析出 Json 的原因:

  • 字符串被 " " 包围。并使用 \" 在里面转义。这是一个例子:

"{\"name\":\"alan\",\"age\":34}"

when you try to parse above string by JSON.parse() , still return the a string: {"name":"alan","age":34} , and \" is replace by " .但是再次使用 JSON.parse() 函数,它会返回你想要的对象。所以在这种情况下,你可以这样做:

JSON.parse(JSON.parse("{\"name\":\"alan\",\"age\":34}" ))

  • 您的字符串使用 ' 而不是 " 。例子:

{'name':'alan','age':34}

如果您尝试通过 JSON.parse() 解析上述字符串,可能会导致错误

原文由 alan9uo 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题