我的服务器有一个json -
{"canApprove": true,"hasDisplayed": false}
我可以像这样解析json -
var msg = JSON.parse('{"canApprove": true,"hasDisplayed": false}');
alert(msg.canApprove); //shows true.
在我的ajax响应函数中,我通过方法参数jsonObject
抓住了前面提到的相同json -
//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:第1行第2列的意外字符 JSON数据
有人能告诉我为什么会收到错误吗?
答案 0 :(得分:3)
您的JsonObject似乎是一个Json对象。您无法从字符串中解析Json的原因:
字符串由"环绕" 即可。并在示例中使用 \" 转义:
"{\"name\":\"alan\",\"age\":34}"
当你尝试通过JSON.parse()解析上面的字符串时,仍然返回一个字符串:{" name":" alan"," age" :34}, \" 替换为" 。但是再次使用JSON.parse(),它将返回您想要的对象。所以在这种情况下,你可以这样做:
JSON.parse(JSON.parse("{\"name\":\"alan\",\"age\":34}" ))
使用' 代替" 。例如:
{'name':'alan','age':34}
当您尝试通过JSON.parse()解析上面的字符串时,可能会导致错误
答案 1 :(得分:2)
如果服务器发送有效的JSON,我认为你不应该调用JSON.parse(jsonObject)
,因为它会在检索响应时自动解析。我相信如果您设置Content-type: application/json
标题,它将自动解析。
尝试使用jsonObject
,就像它已经被解析一样,如:
console.log(jsonObject.canApprove);
之前不调用JSON.parse
。
答案 2 :(得分:2)
它已经是一个对象,无需解析它。只需尝试
alert(jsonObject.canApprove)
在您的回复功能中。
Json.parse期待一个字符串。
答案 3 :(得分:1)
var text = '{"canApprove": true,"hasDisplayed": false}';
var parsedJSON = JSON.parse(text);
alert(parsedJSON.canApprove);
这很有效。创建字符串时,可能会使用"
而不是'
。
答案 4 :(得分:1)
您的jsonObject
似乎已经过解析,您需要测试是否属于这种情况。
function(jsonObject){
var msg = (typeof jsonObject == "object" ? jsonObject : JSON.parse(jsonObject));
}
您的回叫也可能是空的,如果您尝试解析空字符串,它会生成相同的错误。所以测试回调值。
function(jsonObject){
if(jsonObject) {
var msg = (typeof jsonObject == "object" ? jsonObject : JSON.parse(jsonObject));
}
}
答案 5 :(得分:1)
以下是如何进行ajax调用并解析结果的示例:
var query = {
sUserIds: JSON.stringify(userIds),
};
$.ajax({
type: "POST",
url: your-url,
data: JSON.stringify(query),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (response) {
var your_object = JSON.parse(response.d);
},
failure: function (msg) {
alert(msg);
},
error: function (a, b, c) {
}
});
答案 6 :(得分:0)
正如有人在那里提到的那样,这实际上解决了这个问题。我从中学到的可能是PHP编码json对象的方式对JavaScript来说并不熟悉。
var receivedData = data.toString()
receivedData = JSON.parse(receivedData)
console.log(receivedData.canApprove)
这样可行。
答案 7 :(得分:0)
我遇到了类似的问题,现在已经解决了。我正在使用ASP.Net MVC将值发送到.js文件。问题是我从Action方法返回JsonResult,因为此JSON.parse在.js文件中失败。我将Action方法的返回类型更改为字符串,现在JSON.parse可以正常工作。