2011-03-31 71 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