解析 JSON 给出“意外的令牌 o”错误 [重复]

Posted

技术标签:

【中文标题】解析 JSON 给出“意外的令牌 o”错误 [重复]【英文标题】:Parsing JSON giving "unexpected token o" error [duplicate] 【发布时间】:2013-03-15 01:45:44 【问题描述】:

我在解析简单的 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() 对字符串进行编码。

【问题讨论】:

将其更改为:var ques_list = JSON.stringify(cur_ques_details);谢谢。 【参考方案1】:

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

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

【讨论】:

如何从jquery中检测数据是否已经是一个有效的json对象? @mko:在这种情况下,你不需要。你知道它是或者你不知道。看看它是否符合 JSON 规范。 @DarkFalcon 我用 if (typeof data == 'object') dostuff 检查它是 json 对象还是纯字符串 请注意,JSON 是 JavaScript 对象表示法,因此 javascript 源代码中的 litteral JSON 只是一个 JS 对象。我们借用了 Javascript 的对象语法在编程语言之间进行数据传输,因为它易于使用。 @FilipHaglund:除了 JSON 的语法比 JS 对象的语法严格得多。例如,JS 允许不带引号的属性名称,而 JSON 不允许。【参考方案2】:

尝试这样解析:

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

【讨论】:

这对我有用。非常感谢。我意识到我正在从我的控制器中回显多余的不必要的信息。 为什么使用jQuery 为什么不使用JSON.parse【参考方案3】:

使用JSON.stringify(data);

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

【讨论】:

只调用JSON.stringify 不会对您的数据做任何事情,该函数实际上会返回您的 now 序列化数据。【参考方案4】:

但是,您的错误来源是您需要将完整的 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>

【讨论】:

【参考方案5】:

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

【讨论】:

没有“JSON 对象”这样的东西。 JSON 是一个字符串。你的意思是一个“JS对象”。 我认为他的意思是“Javascript对象”【参考方案6】:

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

【讨论】:

【参考方案7】:

我在使用 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的使用就可以了。

【讨论】:

【参考方案8】:

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

【讨论】:

我遇到了与[object Object] 相同的问题,我的问题是我没有存储普通对象,而是存储了 DOM 对象。所以,我通过从 DOM 对象中提取有用的值并将它们存储在一个对象中来完成它,然后我将该对象转换为 JSON。然后为了获取值,我解析了那个 JSON 对象。

以上是关于解析 JSON 给出“意外的令牌 o”错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 Json NSDictionary to String 给出 Optional("String") 错误 [重复]

解析 Json 数据。嵌套对象给出错误

R.id 给出错误“无法解析符号'R'”[重复]

Java 解析 XML 文档给出“Prolog 中不允许的内容”。错误[重复]

循环遍历 JSON 数组会给出“未定义”的结果 [重复]

我在尝试恢复节点模块时收到错误“错误意外结束 JSON 输入时解析'...“依赖项”:“tsli'”[重复]