2014-08-27 30 views
0

我钻进了一个小东西,同时获得来自服务器的JSON文件时,JSON文件包含这样的事情:错误解析JSON与开始“变种......”

var reviews = [ 
    { 
     "firstName":"Simon", 
     "lastName":"Lock", 
     "fullName":"Simon Lock", 
     "location":"San Francisco", 
     "reviewTitle":"Super quality.. I will show here again!", 
     "reviewBody":"Super nice quality, fast devilery, good prices. I will shop here again!", 
     "starRating":"5" 
    }, 
    { 
     "firstName":"John", 
     "lastName":"Smith", 
     "fullName":"John Smith", 
     "location":"New York", 
     "reviewTitle":"Princely Sum", 
     "reviewBody":"A decent local curry house in Faversham, Kent known for its Elvis nights.", 
     "starRating":"4"   
    }, 
]; 

和预期的一样,我得到一个错误,同时获得该文件与$.ajax

SyntaxError: Unexpected token v 

由于不是一个有效的JSON格式,但我也试着用另一种dataType来做。 我的问题是:

有没有办法让JSON文件中的变量存储在另一个变量,以便它可以正常操作?

我也尝试使用​​但我没有为我工作。

谢谢

+1

它不是真的JSON可言,这是一个JavaScript对象。 – adeneo 2014-08-27 16:41:47

+1

你在第二个对象的末尾有一个额外的逗号。 – 2014-08-27 16:41:49

+0

我目前无法访问json文件,那么有什么办法可以做到吗?否则当我有服务器凭据时,我将重新执行API – jycr753 2014-08-27 16:43:45

回答

4

JSON只是存储数据的一种方式,而不是JavaScript代码。它不知道如何处理var reviews =。你存储在你的JSON文件中的就是下面的数据。

[ 
    { 
     "firstName":"Simon", 
     "lastName":"Lock", 
     "fullName":"Simon Lock", 
     "location":"San Francisco", 
     "reviewTitle":"Super quality.. I will show here again!", 
     "reviewBody":"Super nice quality, fast devilery, good prices. I will shop here again!", 
     "starRating":"5" 
    }, 
    { 
     "firstName":"John", 
     "lastName":"Smith", 
     "fullName":"John Smith", 
     "location":"New York", 
     "reviewTitle":"Princely Sum", 
     "reviewBody":"A decent local curry house in Faversham, Kent known for its Elvis nights.", 
     "starRating":"4"   
    } 
] 
+0

所以没有办法避免这样做,以及为这个人做一个适当的API,谢谢队友:) – jycr753 2014-08-27 16:47:14

+1

最后一个尾随逗号也需要删除,因为JSON不幸的是不允许这些逗号。 – 2014-08-27 16:51:49

2

记住,这不是我建议在安全性是至关重要的情况下,但你确实有使用上的文件的纯文本eval()功能的选项。

eval('var reviews = [ 
    { 
    "firstName":"Simon", 
    "lastName":"Lock", 
    "fullName":"Simon Lock", 
    "location":"San Francisco", ... 

会给你一个变量的评论,其中包含你想要的对象。

编辑:的eval是邪恶的,我知道

+1

+1有效的解决方案,尽管如果可能的话我宁愿将它作为脚本加载。另外,使用'Function'构造函数可以避免在使用'eval()'时在现代浏览器中经常遇到的严重的性能损失......像这样:'var f = new Function(my_data); f();'或者在一个语句中:'new Function(my_data)();'它也使用全局作用域而不是本地作用域。除此之外,它基本上是一样的。 – 2014-08-27 16:59:11

+0

在这种情况下,我认为substr会优于eval()。是的,他们是邪恶的。 – Jason 2014-08-27 17:47:40