javascript JSON.parse()不工作

b1zrtrql  于 2023-06-28  发布在  Java
关注(0)|答案(9)|浏览(215)

我有一个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

}

但现在我得到了以下错误-
语法错误:JSON.parse:JSON数据的第1行第2列出现意外字符
谁能告诉我为什么我会出错?

2ic8powd

2ic8powd1#

你的JsonObject似乎是一个JSON对象。无法从String解析Json的原因:

  • 字符串由" "包围。并使用\"逃逸。下面是一个例子:

"{\"name\":\"alan\",\"age\":34}"
当你试图通过JSON.parse()解析上面的字符串时,仍然返回a字符串:{"name":"alan","age":34}\"替换为"。但是再次使用JSON.parse()函数,它将返回您想要的对象。在这种情况下,你可以这样做:
JSON.parse(JSON.parse("{\"name\":\"alan\",\"age\":34}" ))

  • 字符串使用'而不是"。示例:

{'name':'alan','age':34}
如果您尝试通过JSON.parse()解析上述字符串,可能会导致错误

cig3rfwq

cig3rfwq2#

我认为如果服务器发送的是有效的JSON,你不应该调用JSON.parse(jsonObject),因为当它检索到响应时,它会自动解析。我相信如果你设置了Content-type: application/json头,它会被自动解析。
尝试使用jsonObject,就像它已经被解析过一样,类似于:

console.log(jsonObject.canApprove);

之前没有调用JSON.parse

pw136qt2

pw136qt23#

这个答案可能会帮助那些将JSON作为字符串存储在SQL数据库中的人。
我在储存跟随的价值

JSON.stringify({hi:hello})

在MySQL中。存储在SQL中的JSON是{"hi":"hello"}
问题是当我从db中读取这个值并将其提供给JSON.parse()时,它给了我错误。
我试着用引号把它括起来,但没有用。
最后,以下工作

JSON.parse(JSON.stringify(jsonFromDb))

这样就成功了,JSON也被正确解析了。
我知道存储机制可能不合适,但这些都是客户的需要。

6rvt4ljy

6rvt4ljy4#

它已经是一个对象,不需要解析它。简单地尝试

alert(jsonObject.canApprove)

在你的响应函数中。
parse需要字符串。

6ovsh4lw

6ovsh4lw5#

你的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));
    }
}
elcex8rz

elcex8rz6#

var text = '{"canApprove": true,"hasDisplayed": false}';

var parsedJSON = JSON.parse(text);

alert(parsedJSON.canApprove);

这是可行的。在创建String时,您可能使用"而不是'

xfb7svmp

xfb7svmp7#

下面是一个如何进行 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) {

    }
});
2guxujil

2guxujil8#

我遇到过类似的问题,现在已经解决了。我使用ASP.NetMVC向.js文件发送值。问题是我从Action方法返回JsonResult,因为这个JSON.parse在.js文件中失败了。我将Action方法的返回类型更改为string,现在JSON.parse工作正常。

6vl6ewon

6vl6ewon9#

正如上面有人提到的,这实际上解决了问题。我从中学到的是,PHP编码json对象的方式可能对JavaScript并不熟悉。

var receivedData = data.toString()
receivedData = JSON.parse(receivedData)
console.log(receivedData.canApprove)

这会成功的

相关问题