455

我在解析简单的 JSON 字符串时遇到问题。我已经在J​​SONLint上检查了它们,它表明它们是有效的。但是,当我尝试使用其中一个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>

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

4

8 回答 8

811

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

var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"};
document.write(cur_ques_details['ques_title']);
于 2013-03-25T14:17:54.933 回答
72

尝试解析:

var yourval = jQuery.parseJSON(JSON.stringify(data));
于 2015-07-14T15:32:37.537 回答
14

使用JSON.stringify(data);

$.ajax({
    url: ...
    success:function(data){
        JSON.stringify(data); //to string
        alert(data.you_value); //to view you pop up
    }
});
于 2015-02-25T17:08:52.973 回答
11

但是,您的错误来源是您需要将完整的 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>
于 2013-03-25T14:30:05.797 回答
10

cur_ques_details已经是JS对象了,不需要解析

于 2013-03-25T14:17:53.947 回答
6

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

于 2014-09-29T20:54:29.597 回答
6

当我使用 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",数据是一个 JSON 字符串。那么使用$.parseJSON就OK了。

于 2014-10-08T07:17:57.183 回答
1

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

于 2015-02-22T06:38:42.753 回答