2009-09-23 170 views
3

我有一個硬編碼的JSON字符串。解析JSON字符串

var test = "JSON STRING HERE"; 

我正在使用jQuery。我知道有一個像getJSON這樣的函數,但是這會產生一個AJAX調用。我希望它解析硬編碼字符串,以便我可以使用$.each(test, function(a,b){}))

謝謝您的時間。

回答

11

原題:

jQuery讓不包括可公開訪問的JSON解析器或編碼器的一個點。他們希望你爲此使用第三方庫。

我推薦了一個在json.org主辦:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

或者,您可以使用託管在谷歌代碼jQuery的JSON插件:

http://code.google.com/p/jquery-json/


在回答「爲什麼不jQuery的使它的可用解析器?」:

的jQuery實際上並不包括任何種類的解析器。在jQuery代碼庫的AJAX部分,你可以看到他們在lines 572-579上做了什麼。

快速的說法是,他們實際上做一次檢查,看看是否你已經包括外部的JSON庫如來自json.org的一個,如果它發現它,他們用它來解析。如果你沒有包含一個,他們返回包裝在一個函數中的json,並有效地返回它進行評估。非常棘手,但非常聰明!

+1

針對jQuery插件的+1。我喜歡它,當它與圖書館- – Daff 2009-09-23 07:14:35

+0

謝謝。爲什麼jQuery不能使解析器公開訪問? – 2009-09-23 07:30:14

+0

@Alec,你知道,這是一個很好的問題。我將用該信息編輯我的答案。 – 2009-09-23 08:02:40

0

不幸的jQuery不支持JSON解析與JSON或JSONP的AJAX功能外部作爲數據類型(反序列化SI非常緊密地結合到AJAX和回調代碼)。當然,你可以只是做一個

var obj = eval(test); 

但是,這絕對不是recommened方式(除了當你肯定知道你的字符串只是一個JavaScript對象,而不是任意的源代碼被執行)。所以最好的方法可能是使用另一個庫,如JSON2 library(在json.org上找到)。

1

這裏是jQuery不會在Ajax請求時,數據類型設置爲「JSON」(這是的getJSON做什麼,引擎蓋下):

window["eval"]("(" + data + ")"); 
+0

+1,用於指出jQuery的功能。不是爲了方法本身。啊。 – eyelidlessness 2009-09-23 07:25:18

+0

這就是它最終會回到,雖然它不直接在那裏。他們實際上首先檢查外部解析庫(一個名爲JSON的對象),然後如果他們沒有找到它,它將它包裝在一個函數調用中,然後將它發送到eval。 – 2009-09-23 08:09:20

5

你的人意識到,這JSON表示「的JavaScript對象符號「?如果你有JavaScript對象表示法硬編碼,那麼只要鬆開引號,並且完成解析它,因爲JavaScript解析器將處理此問題。

var jsonstr = "{prop1: 'val1', prop2: 'val2'}"; 
var parsed = {prop1: 'val1', prop2: 'val2'}; 

很簡單,不是嗎?!!可能有些東西我不知道,但對我來說,理解用JavaScript編寫解析器的人很難......當然,如果您不確定jsonstr的源代碼安全性,那麼直接對其進行評估可能不是最好的想法,但是如果您只控制了源代碼,尤其是在對代碼進行硬編碼時就像它在問題中所說的那樣,然後只是放鬆引號!