2014-08-27 29 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