2012-01-07 92 views
0

我試圖使用eval的JSON格式的數據集來檢索屬性,即價值,使用上

[{"item_one":1, "item_two": 2, "item_three": 3}] 

我使用dajax的Ajax調用像Django的內JSON數據的eval()這樣的:

@dajaxice_register 
def get_current_id(request): 
    home_timeline = oauth_req(
    'http://api.twitter.com/1/statuses/home_timeline.json?count=1', 
    settings.TWITTER_TOKEN_KEY, 
    settings.TWITTER_TOKEN_SECRET 
    ) 
    return simplejson.dumps({'home_timeline': home_timeline }) 

它得到這個,因爲它的回調:

function get_current_id_callback(data){ 
     if(data==Dajaxice.EXCEPTION){ 
     alert('Error! Something happens!'); 
     } 
     else{ 
     console.log(data.home_timeline); 
     } 
    } 

我不明白爲什麼這給了我不確定:

console.log(eval(data.home_timeline.item_one)) 

什麼是檢索item_one的值的正確方法?

謝謝。

+3

放棄這一點。目前常用的每種語言都有一個內置的JSON解析器,或者隨時可用。特別是Javascript。查看'JSON.parse'。它比「eval」更安全,效率更高。你的框架甚至可能已經爲你做了。 – cHao 2012-01-07 02:00:37

+2

@cHao,使用JSON.parse仍然沒有正確解析'data.home_timeline.item_one',給出:'未捕獲的SyntaxError:意外的令牌ü get_current_id_callback:8000 /:64'它是:'console.log(JSON.parse (data.home_timeline.id_str));'謝謝。 – neridaj 2012-01-07 03:21:28

+0

而當你說'console.log(data)'(或可能'console.log(data.home_timeline)'),那會給你什麼? – cHao 2012-01-07 03:43:53

回答

0

如果data仍然是一個字符串,那麼你需要eval(data)(或者@cHao建議,解析它)來產生一個能夠被取消引用的JavaScript對象。

如果它不只是一個字符串,它不應該首先評估。

+0

當遍歷包含一個索引的對象時,eval和JSON.parse都可以工作 - 不必循環遍歷一個索引。這工作:'$ .each(eval(data.home_timeline),function(i,item){console.log(item.id_str); });'這也適用:'$ .each(JSON.parse (data.home_timeline),function(i,item){console.log(item.id_str); });'。那麼,爲什麼沒有'$ each()'就不能工作? – neridaj 2012-01-07 19:18:06

+0

謝謝,想通了:'parsed = JSON.parse(data.home_timeline); console.log(parsed [0] .id_str);' – neridaj 2012-01-07 20:54:16