我有一个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列出现意外字符
谁能告诉我为什么我会出错?
9条答案
按热度按时间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()
解析上述字符串,可能会导致错误cig3rfwq2#
我认为如果服务器发送的是有效的JSON,你不应该调用
JSON.parse(jsonObject)
,因为当它检索到响应时,它会自动解析。我相信如果你设置了Content-type: application/json
头,它会被自动解析。尝试使用
jsonObject
,就像它已经被解析过一样,类似于:之前没有调用
JSON.parse
。pw136qt23#
这个答案可能会帮助那些将JSON作为字符串存储在SQL数据库中的人。
我在储存跟随的价值
在MySQL中。存储在SQL中的JSON是
{"hi":"hello"}
问题是当我从db中读取这个值并将其提供给
JSON.parse()
时,它给了我错误。我试着用引号把它括起来,但没有用。
最后,以下工作
这样就成功了,JSON也被正确解析了。
我知道存储机制可能不合适,但这些都是客户的需要。
6rvt4ljy4#
它已经是一个对象,不需要解析它。简单地尝试
在你的响应函数中。
parse需要字符串。
6ovsh4lw5#
你的
jsonObject
看起来已经解析了,你需要测试是否是这样。也有可能回调是空的,如果你试图解析一个空字符串,它会生成同样的错误。所以测试回调值。
elcex8rz6#
这是可行的。在创建String时,您可能使用
"
而不是'
。xfb7svmp7#
下面是一个如何进行 AJAX 调用并解析结果的示例:
2guxujil8#
我遇到过类似的问题,现在已经解决了。我使用ASP.NetMVC向.js文件发送值。问题是我从Action方法返回JsonResult,因为这个JSON.parse在.js文件中失败了。我将Action方法的返回类型更改为string,现在JSON.parse工作正常。
6vl6ewon9#
正如上面有人提到的,这实际上解决了问题。我从中学到的是,PHP编码json对象的方式可能对JavaScript并不熟悉。
这会成功的