Попытка понять коллекции chef_vault и ruby
Я новичок в Ruby и Chef. У меня проблемы с пониманием того, как извлечь вложенные элементы из пакета данных (chef_vault). Я думаю, что это более фундаментальный вопрос по Ruby, но я не уверен, что это несколько специфично для Chef.
Я создал это хранилище:
$json = '{
"KEY1": [{
"SUBKEY1": "aaaaa",
"SUBKEY2": "bbbbbbb",
"SUBKEY3": "cccccccc"
}],
"KEY2": [{
"SUBKEY1": "dddddd",
"SUBKEY2": "eeeeee"
}],
"KEY3": "fffffff",
"KEY4": "ggggggg"
}'
knife vault create test_vault vaultitem1 $json --admins red888 --mode client --search 'role:testservers'
Вот что я заметил, когда пытался извлечь из него вложенные элементы:
test_vault = ChefVault::Item.load("test_vault", "vaultitem1")
puts test_vault.class
puts test_vault['SUBKEY1'].class
puts test_vault['SUBKEY1'].inspect
puts test_vault['SUBKEY1'][0]['SUBKEY2']
Теперь то, что я вижу в консоли:
ChefVault::Item
Array
[{"SUBKEY1"=>"aaaaa", "SUBKEY2"=>"bbbbbbb", "SUBKEY3"=>"cccccccc"}]
{"SUBKEY1"=>"aaaaa", "SUBKEY2"=>"bbbbbbb", "SUBKEY3"=>"cccccccc"}
bbbbbbb
Первоначально я пытался test_vault['KEY1']['SUBKEY2']
который дал мне ошибку. Мой вопрос, почему я должен делать test_vault['KEY1'][0]['SUBKEY2']
что я индексирую с [0]?
1 ответ
Решение
KEY1
а также KEY2
оба массива, содержащие один хэш. Вот как вы настроили JSON, и именно так вы должны его использовать. Не совсем Рубин.