2011-03-31 121 views
3

有人可以向我解釋這個解析函數的實際工作原理嗎?解析JSON函數

function parseFlickrJson(jsonstring){ 
    var data=null; 

    var jsonFlickrApi=function(d){ 
     data = d; 
    } 

    eval(jsonstring); 

    return data; 
} 
+0

是嗎?它來自哪裏? – 2011-03-31 22:58:10

回答

8

JSON實際上是有效的JavaScript。所以你需要'解碼'它,就是評估它爲JavaScript(因此是eval)。它還使用了被稱爲JSONP http://en.wikipedia.org/wiki/JSONP的地方,其中不僅僅返回了JSON。

JSONP基本上是包裝在函數調用中的JSON。一個JSONP響應的內容可能是:

parseResponse({"Name": "Cheeso", Id : 1823, "Rank": 7}) 

這意味着,當你評估JSONP,它將嘗試調用一個函數(在本例中parseResponse和你的情況jsonFlickrApi)。這就是爲什麼jsonFlickrApi函數必須在eval(jsonstring)發生之前定義的原因。

+1

Upvoting只是爲了好玩:) – powtac 2011-03-31 22:59:27

+0

so var jsonFlickrApI不僅僅是一個自定義變量,而是一個實際存在的'事物'? (對不起,這聽起來有點無知......我主要用於Java) – raoulbia 2011-03-31 23:12:48

+0

'var jsonFlickrApi = function(d)...'實際上是創建一個匿名函數並將其引用存儲在'jsonFlickrApi'中所以我想這不是真正的匿名)。 'eval'評估一個字符串,就好像它是源代碼一樣。由於來自Flickr API的響應包含對「jsonFlickrApi」的調用,因此該函數實際存在非常重要,否則您將得到一個異常。 – 2011-03-31 23:19:13