Хэш - это словарь, как коллекция уникальных ключей и их значений.Также называемые ассоциативными массивами, они похожи на массивы, но там, где массив использует в качестве индекса целые числа, хэш позволяет использовать любой тип объекта.
Конечно, значением может быть любой объект - строка, метод, nil, число, объект.Итак, только после создания мы можем узнать, что сохраняется в нашем хеше.По этой причине при попытке получить все ключи:
data.keys # => ["etag", "items"]
Нет вложенного ключа.Таким образом, поиск значения по отсутствующему ключу возвращает nil
.
Чтобы выбрать все videoId, вы должны сделать что-то вроде этого:
data["items"].map { |item| item["snippet"]["resourceId"]["videoId"] }.compact
Также вы можете обновить класс Hash как там :
class Hash
def deep_find(key, object=self, found=nil)
if object.respond_to?(:key?) && object.key?(key)
return object[key]
elsif object.is_a? Enumerable
object.find { |*a| found = deep_find(key, a.last) }
return found
end
end
end
И затем запустить
data["items"].map { |item| item.deep_find('videoId') }
Этот метод позволяет избежать ошибки, когда json будет иметь переменную структуру.