0

Facebookから返されたjsonを解析しようとしています。今の私の考えは、Facebookのjsonからできるだけ多くの詳細を取得することです。だから私は次のように使用します(認証がFacebookからの解析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 ['year'] ['name']は、「nilの評価中にエラーが発生しました。[]」というエラーをスローします。

これを回避するにはどうすればよいですか?

私が思った一つの方法は、edu ['year'] ['name'] || ""

ただし、「年」自体が存在しない場合でも、これはエラーをスローします。(「name」が見つからない場合のエラーを回避します)

次の解決策は必要ありません:auth ['extra']が存在するかどうかを確認し、次にauth ['extra'] ['user_hash']が存在するかどうかを確認し、次にauth ['extra']['user_hash']['educationかどうかを確認します']が存在し、auth ['extra'] ['user_hash'] ['education']['year']['name']などかどうかを確認します。

例外処理を使用するのは良い方法ではないと思います。

何か良い方法はありますか?

ありがとうございました

4

1 に答える 1

1

演算子を使用して&&、nilをチェックします。

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
于 2011-06-27T12:58:43.040 に答える