Ruby - обработка JSON-хэша, когда ключ может не существовать - PullRequest
0 голосов
/ 21 февраля 2019

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

Итак, вот пример кода:

digest = cover_id(map)

def cover_id(a_map)
   cover_from_map = a_map['metadata']['cover'][0]['@']
   a_map['resources'].find {|resource| resource['id']==cover_from_map}['-major-md5-digest']
end

Глядя на это, я не понимаю, как лучше всего справиться с двумя вещами:

  • Если во-первых song_map['metadata']['cover'][0]['@'] не существовало - это просто случай использованияsong_map.key?(['metadata']['cover'][0]['@']).Я чувствую, что используя это означает, что я продублировал код?
  • Вместо жесткого кодирования 0 есть какой-нибудь способ, которым я могу просто сказать, получить первый?

По сути, из того, что я знаю сейчасЯ подумал:

digest = cover_id(map) rescue nil

def cover_id(a_map)
   unless a_map['metadata']['cover'][0]['@'] return nil

   cover_from_map = a_map['metadata']['cover'][0]['@']
   a_map['resources'].find {|resource| resource['id']==cover_from_map}['-major-md5-digest']
end

Но я не думаю, что справился бы, если бы a_map['metadata']['cover'][0]['@'] на самом деле не существовало.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 февраля 2019

Проверка метода dig хэша: https://ruby -doc.org / core-2.3.0_preview1 / Hash.html # method-i-dig

h = { foo: {bar: {baz: 1}}}

h.dig(:foo, :bar, :baz)           #=> 1
h.dig(:foo, :zot)                 #=> nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...