Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.parse()不工作_Javascript_Ajax_Json - Fatal编程技术网

Javascript JSON.parse()不工作

Javascript JSON.parse()不工作,javascript,ajax,json,Javascript,Ajax,Json,我的服务器上有一个json,它是- {"canApprove": true,"hasDisplayed": false} 我可以像这样解析json- var msg = JSON.parse('{"canApprove": true,"hasDisplayed": false}'); alert(msg.canApprove); //shows true. 在我的ajax响应函数中,我捕获了前面通过方法参数jsonObject- //response function function

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

{"canApprove": true,"hasDisplayed": false}  
我可以像这样解析json-

var msg = JSON.parse('{"canApprove": true,"hasDisplayed": false}');
alert(msg.canApprove);  //shows true.
在我的ajax响应函数中,我捕获了前面通过方法参数
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:的第1行第2列处出现意外字符 JSON数据


有人能告诉我为什么会出错吗?

我认为如果服务器发送的是有效的JSON,就不应该调用
JSON.parse(jsonObject)
,因为它在检索响应时会自动解析。我相信如果您设置
内容类型:application/json
头,它将被自动解析

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

console.log(jsonObject.canApprove);
不调用之前的
JSON.parse

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

var parsedJSON = JSON.parse(text);

alert(parsedJSON.canApprove);

这很有效。在创建字符串时,您可能使用
而不是

它已经是一个对象,不需要解析它。只需尝试一下

alert(jsonObject.canApprove)
在您的响应函数中


Json.parse需要一个字符串。

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

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

    }
});

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

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

这将起作用。

您的JsonObject似乎是一个Json对象。无法从字符串解析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()解析上述字符串时,可能会导致错误


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

这几乎肯定意味着JSON已经被解析了。在解析之前,将
console.log(typeof jsonObject);
添加到响应函数中。我打赌它是“Object”“。请阅读完整的问题,他正在尝试解析json字符串,而不是已解析的json。这是在他的代码注释中。@taxicala这个问题一直在出现。如果您将已解析对象的
.toString()
输出传递到
JSON.parse()
@R3tep中,您就会得到这个错误。是的,这也可以做到!重要的是OP回到问题上来,告诉我们
console.log()
调用显示了什么.console.log(typeof jsonObject)-->object和console.log(jsonObject)-->[object object]“如果你发送了一个有效的JSON,你不需要解析它”这通常是不正确的。“它已经是有效的JSON,不需要解析它。”JSON总是需要解析。也许你的意思是“它是一个对象”?请注意,拥有有效的JSON和设置
Content-type:application/JSON
是两件不同的事情。拥有有效的JSON通常并不意味着自动解析。@taxicala我注意到,如果在ajax()jQuery方法上使用
数据类型:“JSON”
,则不需要使用parse()(如果使用,则实际会收到OP告知的错误);但如果不指定
数据类型:“json”
,则必须使用它。我必须调查这是为什么。有什么线索吗?我想你应该在JSON之前使用replace函数。解析示例:var data=“{\\'name\':\'alan\',\'age\':34}”str=data.replace(/\\\/g',);//然后使用JSON.pase函数var jsonObj=JSON.parse(str);但是我有
jsonObject
。如何将其转换为
文本
?@Razib:我以为您想将JSON解析为对象。你现在想走另一条路吗?为什么?为什么不使用jsonObject.toString()然后将其发送到JSON.parse我想你应该在JSON之前使用replace函数。解析示例:var data=“{\\'name\”:\“alan\”,\“age\”:34}”str=data.replace(/\\\/g),;//然后使用JSON.pase函数var jsonObj=JSON.parse(str);