2011-06-27 5 views
0

facebookから返されたjsonを解析しようとしています。 私の考えはfacebook jsonからできるだけ多くのdetailksを得ることです。 は、だから私はnilを評価している間に、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 

(認証するFacebookからJSONを解析していると仮定)のように使用今ここでの問題は、一部の人は学校名ではなく、年を追加しているかもしれないということです。 ので、明らかに

eduの[ '年'] [ '名前'] を伝えるエラーがスローされます "nilを評価中にエラーが発生しました。[]"。

どうすればこの問題を回避できますか?私は、それ自体が存在しない 「」|| [「年」] [「名前」] EDUを置く

が、これはまだ場合にエラーをスローします「年」だったと思っ

一つの方法。 auth ['extra']が存在するかどうかを確認します。 次に、auth ['extra'] [' user_hash ']が存在する auth [' extra '] [' user_hash '] [' education ']が存在するかどうか確認してください auth [' extra '] [' user_hash '] [' education '] [' year '] ['name'] など..

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

いいですか?

答えて

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 
+0

しかし、あなたはそれが計算の点では何が違うのだと思いますか? 私はこれが内部的にintの階段であることを意味します。ではない ? –

+0

これを 'if'sの階段で書くことができます。これはこれを行うための最もきちんとした方法です。これ以上のRubyを得ることはできません。 –

+0

ああ、ありがとう。 –

関連する問題