instagram.rb:23:in `[]': can't convert String into Integer (TypeError)
Вы получаете эту ошибку, потому что в puts item["id"]
, item
является массивом, а не хешем, поэтому Ruby пытается преобразовать то, что вы помещаете между[]
в целочисленный индекс, но не может, потому что это строка ("id"
).
Это вытекает из того факта, что json_output.body
является хешем.Посмотрите еще раз на пример ответа JSON в документации:
{ "data" : [
{ "type" : "image",
// ...
"id" : "22699663",
"location" : null
},
// ...
]
}
Вся эта структура становится единым хешем с одним ключом "data"
, поэтому, когда вы вызываете @tags.each
, вы на самом деле звоните Hash#each
, и поскольку значение "data"
является массивом, когда вы вызываете item["id"]
, вы вызываете Array#[]
с неправильным типом параметра.
Короче говоря, что вы на самом деле хотите сделатьВозможно, это так:
@tags = JSON.parse( json_output.body )[ "data" ]
.. тогда @tags
будет массивом, который вы хотите вместо хеша, и вы можете перебирать его элементы так, как вы хотели:
@tags.each do |item|
puts item["id"]
end