Как получить доступ к значениям из вложенного хэша с помощью ruby

-7

{"headends"=>
[{"headend"=>
{"id"=>341766992,
"headend_name"=>"Comcast Burlingame Digital",
"dma_code"=>"807",
"dma_rank"=>6,
"system_name"=>"Comcast",
"headend_city"=>"Burlingame",
"headend_state"=>"CA",
"headend_time_zone"=>"PT",
"dma_name"=>"SAN FRANCISCO-OAK-SAN JOSE",
"channel_device"=>"X",
"country"=>"",
"service_type"=>"CA"},
"mso"=>{"id"=>341775346, "mso_name"=>"Comcast Cable Communications"},
"postal_code"=>"94010",
"device_id"=>"5b9a5042"}],
"services"=>
["amazon",
"directv",
"hbogo",
"hulu",
"itunes",
"itunes",
"netflixusa",
"showtime",
"vudu",
"youtube"],
"postal_code"=>nil,
"apps"=>
["cf528ea9",
"ea0f81d1",
"2ba2dc0e",
"50107ad3",
"3c103fa4",
"692bea67",
"557e96d5",
"b2db5e2a",
"0247ee5a",
"f0ad77dc",
"b24c00b1"]}

Это мой хэш, как я могу извлечь такие значения, как "id" => 341766992, "postal_code" => "94010"

спросил(а) 2017-06-30T09:16:00+03:00 3 года, 3 месяца назад
0
72

Для вещей, которые являются хешами, например {"foo"=>"bar", "baz"=>"blah"}, индексируйте их с помощью ключа, например myhash["foo"] # "baz".

Для вещей, которые являются массивами, например ["hello", "world"], используйте их числовые индексы на основе 0, например myarray[1] # "world".

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

data = {"headends"=>[{"headend"=>{"id"=>341766992, "headend_name"=>"Comcast Burlingame Digital", "dma_code"=>"807", "dma_rank"=>6, "system_name"=>"Comcast", "headend_city"=>"Burlingame", "headend_state"=>"CA", "headend_time_zone"=>"PT", "dma_name"=>"SAN FRANCISCO-OAK-SAN JOSE", "channel_device"=>"X", "country"=>"", "service_type"=>"CA"}, "mso"=>{"id"=>341775346, "mso_name"=>"Comcast Cable Communications"}, "postal_code"=>"94010", "device_id"=>"5b9a5042"}], "services"=>["amazon", "directv", "hbogo", "hulu", "itunes", "itunes", "netflixusa", "showtime", "vudu", "youtube"], "postal_code"=>nil, "apps"=>["cf528ea9", "ea0f81d1", "2ba2dc0e", "50107ad3", "3c103fa4", "692bea67", "557e96d5", "b2db5e2a", "0247ee5a", "f0ad77dc", "b24c00b1"]}

puts data["headends"][0]["headend"]["id"]
puts data["headends"][0]["postal_code"]

# Output:
# 341766992
# 94010

ответил(а) 2017-06-30T09:21:00+03:00 3 года, 3 месяца назад
57

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

  h = { "headends"=>
[
{ "headend"=> {
"id" =>341766992,
"channel_device"=>"X",
"service_type" =>"CA"
},
"mso"=> {
"id" =>341775346,
"mso_name"=>"Comcast Cable Communications"
},
"postal_code"=>"94010",
"device_id" =>"5b9a5042"
}
]
}

h["headends"][0]["headend"]["id"] #=> 341766992
h["headends"][0]["postal_code"] #=> "94010"

ответил(а) 2017-06-30T09:56:00+03:00 3 года, 3 месяца назад
58

До Ruby 2.3:

input['headends'].map do |e|
[
e['postal_code'],
*e['headend'].values_at(*%w|id|),
*e['mso'].values_at(*%w|id|),
]
end

2. 3+

input['headends'].map do |e|
[%w|postal_code|, %w|headend id|, %w|mso id|].map do |key|
e.dig(*key)
end
end

ответил(а) 2017-06-30T09:29:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема