【问题标题】:JSON.parse error on a seemingly valid JSON [duplicate]看似有效的 JSON 上的 JSON.parse 错误 [重复]
【发布时间】: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() 工作得很好。

【问题讨论】:

    标签: javascript jquery json laravel-5


    【解决方案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 选项显式设置。"
    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多