Как заменить несколько нулевых проверок для вложенного хэша в одном выражении / проверке? - PullRequest
0 голосов
/ 11 июня 2018

Я получаю ответ, вызвав вызов API, и меня интересует значение:

JSON.parse(response).first['property/details']['result']['assessment']

JSON.parse(response) дает массив, я выбираю первый элемент хешаи пройти через вложенные хэши в нем, чтобы получить требуемое значение.

Проблема в том, что в любом из значений может быть ноль, что может нарушить код, и поэтому я должен сделать что-то вроде:

if property=JSON.parse(response).first
     if property['property/details']
         if result=property['property/details']['result']
             # get the value result['assessment']
         end
     end
end

Это кажется очень громоздким, и я хотел бы сделать это с как можно меньшим количеством строк, в идеале - одна.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Пока я копаю ответ @ Stefan, если необходимо поддерживать версии Ruby до 2.3 (когда дебютировал dig), можно использовать следующее:

ops = [0, 'property/details', 'result', 'assessment'].
ops.reduce(JSON.parse(response)) { |memo, s| memo && memo[s] }
0 голосов
/ 11 июня 2018

dig ваш друг:

JSON.parse(response).dig(0, 'property/details', 'result', 'assessment')

Вы можете передавать как индексы, так и ключи для обхода вложенных массивов / хеш-структур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...