Как получить доступ к массиву, содержащему хеш-подобные объекты

Я получил массив от 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"]]
Другие вопросы по тегам