关于javascript:看似有效的JSON上的JSON.parse错误

JSON.parse error on a seemingly valid JSON

本问题已经有最佳答案,请猛点这里访问。

我使用JSON.parse()来解析一个json,这个json是从使用jquery的$.get()调用的API(laravel 5)返回的。json似乎是有效的,但是,JSON.parse()在safari和chrome中都返回了错误。

Chrome说:

1
Uncaught SyntaxError: Unexpected token o

萨法里说:

1
SyntaxError: JSON Parse error: Unexpected identifier"object"

代码片段如下:

1
2
3
4
5
6
7
    $.get('/foo/' + product_id, function(data){
        console.log(data);
        var product = JSON.parse(data);
        if (product) {
            // do something
        }
     });

JSON是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{  
  "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()的效果很好。


错误是由于data是一个对象,而不是JSON。您不需要解析任何东西;它已经是一个javascript对象了。jquery在其get方法中进行解析。要确认这一点,请将此行添加到回调的顶部。

1
console.log(data["id"]);

作为这个错误的另一个例子,下面的行也会因为同样的原因而失败。

1
JSON.parse({});