关于javascript:解析JSON给出“意外令牌o”错误

Parsing JSON giving “unexpected token o” error

本问题已经有最佳答案,请猛点这里访问。

我在分析简单的JSON字符串时遇到问题。我在jsonlint上检查过它们,它表明它们是有效的。但是,当我试图使用JSON.parse或jquery选项来解析它们时,它给出了错误unexpected token o

1
2
3
4
5
6
7
8
9
10
11
12
13
<!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']);
   
  </body>
</html>

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


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

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


尝试解析:

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


使用JSON.stringify(data);

1
2
3
4
5
6
7
$.ajax({
    url: ...
    success:function(data){
        JSON.stringify(data); //to string
        alert(data.you_value); //to view you pop up
    }
});


但是,您的错误的根源是需要将完整的JSON字符串放在引号中。以下内容将修复您的示例:

1
2
3
4
5
6
7
8
9
10
11
12
<!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']);
       
    </body>
</html>

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

1
2
3
4
5
6
7
8
9
10
11
<!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);
       
    </body>
</html>

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


响应已经被解析,您不需要再次解析它。如果你再次分析它,它会给你"unexpected token o"。如果需要得到字符串,可以使用JSON.stringify()


我在使用jquery ajax提交数据时遇到了同样的问题:

1
2
3
4
5
6
7
8
$.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",则数据是一个JSON字符串。那么使用$.parseJSON就可以了。


我看到这个unexpected token o错误,因为我的(不完整)代码以前运行过(实时重新加载!)并将特定的键控本地存储值设置为[object Object],而不是{}。直到我换了钥匙,事情才按预期开始了。或者,您可以按照这些说明删除设置不正确的localstorage值。