Как получить доступ к массиву, содержащему хеш-подобные объекты
Я получил массив от API, который, по-видимому, содержит, из-за отсутствия лучшей фразы, нотацию в стиле объекта.
Поскольку это массив, я не могу получить к нему доступ по ключу или значению. Я не вижу метода в этом конкретном типе объекта, который позволил бы мне преобразовать его в хеш или JSON, а затем в хеш.
Каков наиболее подходящий способ преобразования этого в хеш, где я могу получить доступ к данным по ключу и значению?
Выход:
[#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
В качестве альтернативы, если это можно преобразовать в массив с несколькими элементами (вместо одного большого фрагментированного элемента), я мог бы проанализировать его в CSV и отфильтровать вне Ruby. Элементы в новом массиве будут содержать "значения" (например, false, "John Doe", "10.10.10.10).
1 ответ
Решение
Попробуй это:
array # => [#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
array.map { |a| {configured: a.configured, name: a.name, addr: a.addr} }
# or if you can't access the instance variables
array.map do |a|
{
configured: a.instance_variable_get(:@configured),
name: a.instance_variable_get(:@name),
addr: a.instance_variable_get(:@addr)
}
end # => [{configured: false, name: "John Doe", addr: "10.10.10.10"}]
# and if you want an array
array.map do |a|
[
a.instance_variable_get(:@configured),
a.instance_variable_get(:@name),
a.instance_variable_get(:@addr)
]
end # => [[false, "John Doe", "10.10.10.10"]]