Как получить вложенное свойство методом dig - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь получить значение свойства из вложенного свойства, но оно ничего не возвращает.

Когда я запускаю log.info record['metadata'], я получаю следующий вывод:

bang_1            | 2020-01-20 16:47:28 +0000 [info]: #0  body_size="16" collector_ip="172.22.0.1" collector_timestamp=1579538848944 name="default" version="1.0.0"

Итак, я запустил log.info record.dig('metadata').class, чтобы проверить класс:

bang_1            | 2020-01-20 16:47:28 +0000 [info]: #0 Hash

Как можно Я получаю стоимость имущества name? Я пытаюсь выполнить следующий код, но я получил NilClass.

log.info record.dig('metadata', 'name')
log.info record.dig('metadata', 'name').class
record = {
  'xx': 1
}
record['metadata'] = {
  'name': 'default'  
}

puts record
puts record['metadata']

# {:xx=>1, "metadata"=>{:name=>"default"}}
#.{:name=>"default"}

1 Ответ

3 голосов
/ 20 января 2020

В этих строках

record['metadata'] = {
  'name': 'default'  
}

синтаксис 'name': сохраняет значение 'default' с символьным ключом :name (не строковым ключом name). Поэтому вам нужно прочитать это значение следующим образом:

record.dig('metadata', :name)

Если вы хотите избежать использования символического ключа, тогда вы можете использовать другой синтаксис ha sh при создании ha sh:

record['metadata'] = {
  'name' => 'default'  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...