2011-06-27 21 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

哦..谢谢。 –