Я пытаюсь создать переменную экземпляра, которая содержит список URL-адресов в заданном JSON. Возврат из этого вызова (https://en.wikipedia.org/w/api.php?action=query&titles=World&generator=images&gimlimit=10&prop=imageinfo&iiprop=url|dimensions|mime&format=json)
В первом случае, когда я обращаюсь к объекту по отдельности, используя, я получаю правильныйзначение. Если, однако, итерация для получения нескольких значений, я получаю.
неопределенный метод `[] 'для nil: NilClass (NoMethodError) ошибка
@links=[] @description= @data_hash["query"]["pages"]["-1"]["imageinfo"][0]["url"] #Works ok url = ("https://en.wikipedia.org/w/api.php?action=query&titles=World&generator=images&gimlimit=10&prop=imageinfo&iiprop=url|dimensions|mime&format=json") uri = URI(url) response = Net::HTTP.get(uri) @data_hash= JSON.parse(response) ["url"] @data_hash["query"]["pages"].map { |i| i.map { |e| @links<< e['imageinfo'][0] } }
Это должно работать:
@links = @data_hash['query']['pages'] .values .map { |page| page['imageinfo'].first['url'] }