JSON.parse()不起作用

时间:2015-05-12 14:57:06

标签: javascript ajax json

我的服务器有一个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数据

有人能告诉我为什么会收到错误吗?

8 个答案:

答案 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可以正常工作。