Разбор Facebook JSON в рельсах избежать ошибки при оценке ноль. [] - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь разобрать JSON, возвращенный из Facebook.Теперь моя идея состоит в том, чтобы получить как можно больше деталей от Facebook JSON.Поэтому я использую как (предположим, что auth is parse json from facebook)

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'] || ""

, но это все равно выдаст ошибку в случае, если сам год не скажетне существует.(это позволит избежать ошибки в случае, если имя не найдено)

Мне не нужно следующее решение: проверьте, существует ли auth ['extra'], а затем проверьте, есть ли auth ['extra'] ['user_hash '] существует, затем проверьте, существует ли auth [' extra '] [' user_hash '] [' education '], а затем проверьте, существует ли auth [' extra '] [' user_hash '] [' education '] [' year '] ['name '] и так далее ..

Я не думаю, что использование обработки исключений - это хороший способ.

Есть какой-нибудь хороший способ?

Спасибо

1 Ответ

1 голос
/ 27 июня 2011

Используйте оператор && для проверки на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...