2011-06-27 40 views
0

我想解析從facebook返回的json。 現在我的想法是從facebook json獲得儘可能多的細節。 所以我使用像(假設AUTH是解析JSON從Facebook)在rails中解析facebook json避免在評估nil時發生錯誤[]

education_array = auth['extra']['user_hash']['education'] 
education_array.each do |edu| 
     puts edu['school']['name'] 
     puts edu['type'] 
     puts edu['year']['name'] 
    end 

現在,這裏的問題是,有些人可能已經增加了學校名稱,但不是今年。 如此明顯

EDU [ '年'] [ '名'] 會拋出錯誤告訴 「在評估零發生錯誤。[]」。

我該如何避免這種情況?我認爲

一個辦法是把 EDU [「年」] [「名」] ||「」

但是這仍然會拋出錯誤的情況下,「年」本身不存在。 (這將避免錯誤的情況下,「名」未找到)

我不希望以下解決方案: 檢查,如果AUTH [「額外」]存在 然後檢查AUTH [「額外」] [」 user_hash'] 然後檢查auth ['extra'] ['user_hash'] ['education']是否存在 然後檢查auth ['extra'] ['user_hash'] ['education'] ['year']] ['name'] 等等。

我不認爲使用異常處理是一個好方法。

任何好的方法?

謝謝

回答

1

使用&&運營商檢查尼爾斯。

education_array.each do |edu| 
    puts edu['school'] && edu['school']['name'] 
    puts edu['type'] 
    puts edu['year'] && edu['year']['name'] 
end 

舉例來說:

edu = { 'school' => { 'name' => 'value' } } 
edu['school'] && edu['school']['name'] # => 'value' 

edu = { 'school' => { } } 
edu['school'] && edu['school']['name'] # => nil 

edu = { 'school' => { } } 
edu['school'] && edu['school']['name'] # => nil 
+0

但你認爲這是在計算方面有什麼不同? 我的意思是即使這會引起內部ifs的階梯。不是嗎? –

+0

你可以用'if's的階梯寫這個。這是做這件事最好的方式,它不會比這更多的'紅寶石'。 –

+0

哦..謝謝。 –