看似有效的 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) 返回的 jsonjson 看似有效,但是,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/”显示消息有效。为啥会这样?

JSON.parse() 上的数值变化

安全地处理节点中的错误 JSON.parse()

JSON.parse()

JSON.parse()