看似有效的 JSON 上的 JSON.parse 错误 [重复]
Posted
技术标签:
【中文标题】看似有效的 JSON 上的 JSON.parse 错误 [重复]【英文标题】:JSON.parse error on a seemingly valid JSON [duplicate] 【发布时间】:2015-12-14 15:11:31 【问题描述】:我正在使用 JSON.parse()
解析从使用 jquery 的 $.get()
调用的 api (Laravel 5) 返回的 json
。 json
看似有效,但是,JSON.parse()
在 Safari 和 Chrome 中都返回错误。
Chrome 说:
Uncaught SyntaxError: Unexpected token o
Safari 说:
SyntaxError: JSON Parse error: Unexpected identifier "object"
代码片段如下:
$.get('/foo/' + product_id, function(data)
console.log(data);
var product = JSON.parse(data);
if (product)
// do something
);
JSON 是:
"id":"1b7b3eb7-8769-48fe-a421-64c105de3eff",
"parent":null,
"org_id":"845d0d53-de68-42c3-9007-c3d0e72c555e",
"category_id":"e58237f7-e040-4098-8d46-b84f8cdf7d83",
"purchase_tax":null,
"sale_tax":null,
"code":"982",
"name":"Mr. Destin Hoppe",
"is_purchased":false,
"is_sold":false,
"purchase_price":null,
"selling_price":null,
"purchase_includes_tax":false,
"sale_includes_tax":false,
"created_at":"2015-09-16 17:39:34",
"updated_at":"2015-09-16 17:39:34"
有趣的是,eval()
工作得很好。
【问题讨论】:
【参考方案1】:错误是由于data
是一个对象,而不是 JSON。你不需要解析任何东西;它已经是一个 javascript 对象。 jQuery 在其get
方法中进行解析。要确认这一点,请将此行添加到回调的顶部。
console.log(data["id"]);
作为此错误的另一个示例,以下行也会由于相同的原因而失败。
JSON.parse();
【讨论】:
从什么时候开始的?同意我多年后使用 jquery,但最后一次使用它,它曾经是一个字符串(或者是它?) @CodePoet 多年来一直如此。 啊。我想我现在看到了,Response 标头说Content-Type: application/json
,也许这就是原因?
您可以在客户端调用和/或服务器端代码中识别响应类型。也许你从来没有这样做过,因此 jQuery 没有足够的信息来为你完成这项工作。
@CodePoet: 来自docs: "不同类型的对 $.ajax() 调用的响应在传递给成功处理程序之前会经过不同类型的预处理。默认情况下,预处理类型取决于响应的 Content-Type,但可以使用 dataType 选项显式设置。"以上是关于看似有效的 JSON 上的 JSON.parse 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 JSON.parse 解析来自 textarea 元素的有效 JSON
JSON.parse(message) 失败,但“https://jsonlint.com/”显示消息有效。为啥会这样?