解析JSON,给出“意外令牌”;错误

我在解析简单的JSON字符串时遇到了问题。我已经在JSONLint上检查了它们,它表明它们是有效的。但是当我尝试使用JSON.parse或jQuery替代方法解析它们时,它会给我一个错误unexpected token o:

<!doctype HTML>
<html>
<head>
</head>
<body>
<script type="text/javascript">
var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"};
var ques_list = JSON.parse(cur_ques_details);


document.write(ques_list['ques_title']);
</script>
</body>
</html>

注意:我在PHP中使用json_encode()编码我的字符串。

724352 次浏览

cur_ques_details已经是一个JS对象,你不需要解析它

您的数据已经是一个对象。不需要解析它。javascript解释器已经为您解析了它。

var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"};
document.write(cur_ques_details['ques_title']);

然而,错误的根源在于您需要将完整的JSON字符串放在引号中。下面将修复您的示例:

<!doctype HTML>
<html>
<head>
</head>
<body>
<script type="text/javascript">
var cur_ques_details ='{"ques_id":"15","ques_title":"jlkjlkjlkjljl"}';
var ques_list = JSON.parse(cur_ques_details);
document.write(ques_list['ques_title']);
</script>
</body>
</html>

正如其他受访者所提到的,该对象已经被解析为JS对象,因此您不需要解析它。为了演示如何在不解析的情况下完成同样的事情,您可以执行以下操作:

<!doctype HTML>
<html>
<head>
</head>
<body>
<script type="text/javascript">
var cur_ques_details ={"ques_id":"15","ques_title":"jlkjlkjlkjljl"};
document.write(cur_ques_details.ques_title);
</script>
</body>
</html>

响应已经解析,您不需要再次解析它。如果你再次解析它,它会给你“unexpected token o”。如果你需要作为字符串获取它,你可以使用JSON.stringify()

当我使用jQuery AJAX提交数据时,我也有同样的问题:

$.ajax({
url:...
success:function(data){
//server response's data is JSON
//I use jQuery's parseJSON method
$.parseJSON(data);//it's ERROR
}
});

如果响应是JSON,并且你使用这个方法,你得到的数据是一个JavaScript对象,但如果你使用dataType:"text", data是一个JSON字符串。那么使用$.parseJSON是可以的。

我看到这个unexpected token o错误,因为我的(不完整)代码之前运行过(实时重载!),并将特定的键控本地存储值设置为[object Object]而不是{}。直到我换了钥匙,一切才开始正常工作。或者,你可以遵循这些指令删除不正确设置的localStorage值

使用JSON.stringify(data);:

$.ajax({
url: ...
success:function(data){
JSON.stringify(data); //to string
alert(data.you_value); //to view you pop up
}
});

试着这样解析:

var yourval = jQuery.parseJSON(JSON.stringify(data));