解析 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") 错误 [重复]