在rails中解析facebook json可以避免在评估nil时发生错误。[]

时间:2011-06-27 09:46:10

标签: json ruby-on-rails-3 jagged-arrays

我正在尝试解析从facebook返回的json。 现在我的想法是从facebook json获得尽可能多的细节。 所以我使用like(假设auth是来自facebook的parse json)

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 [ '年'] [ '名称']   将错误告诉“在评估nil时发生错误。[]”。

我该如何避免这种情况?

我认为的一种方式            把edu ['year'] ['name'] ||“”

但是如果'year'本身不存在,这仍然会引发错误。 (如果找不到“名称”,将避免错误)

我不想要以下解决方案: 检查是否存在auth ['extra'] 然后检查是否存在auth ['extra'] ['user_hash'] 然后检查是否存在auth ['extra'] ['user_hash'] ['education'] 然后检查auth ['extra'] ['user_hash'] ['education'] ['year'] ['name'] 等等..

我不认为使用异常处理是一种好方法。

有什么好办法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

使用&&运算符检查nils。

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