我正在尝试解析从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'] 等等..
我不认为使用异常处理是一种好方法。
有什么好办法吗?
谢谢
答案 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