2016-06-17 2 views
-1

Я получил массив из API, который, как представляется, содержит из-за отсутствия лучшей фразы в стиле объектов.Как получить доступ к массиву, содержащему объекты, похожие на хэш-объекты

Поскольку это массив, я не могу получить к нему доступ ключом или значением. Я не вижу метода в этом конкретном типе объекта, который позволяет мне преобразовать его в хеш, или JSON, а затем в хэш.

Что является наиболее подходящим способом преобразования этого параметра в хэш, где я могу получить доступ к данным с помощью ключа и значения?

Выход:

[#<ObjectType::ObjectRef:0x30f2862 
@_ref="record:full/data/location/setting/partition", 
@configured=false, 
@name="John Doe", 
@addr="10.10.10.10">] 

В качестве альтернативы, если это может быть преобразован в массив с несколькими элементами (вместо одной большого фрагментированного вместе элемента), я мог разобрать его, чтобы CSV и фильтр за пределами Ruby. Элементы в новом массиве будет содержать "значения" (например, ложные, "Джон Доу", «. 10.10.10.10)

+0

Пожалуйста, прочтите "[mcve]" Нам нужны. чтобы увидеть ваш код, который пытается решить эту проблему. Является ли раздел «Выход» тем, что вы получили от API? Как вы просматриваете данные? –

+0

Да, результат - это массив, возвращаемый API. Я напечатал эти данные, используя 'pretty print', но переменная.inspect вернула бы тот же контент. Я хотел спросить вас: как я могу задать вопрос, который удовлетворяет минимальным, полным и проверяемым, когда у меня действительно нет кода для обмена. Например, я знаю, что я не могу использовать массив для доступа к этим данным как пары ключ/значение. t array не имеет методов для этого, но это не помогло бы. Я могу показать попытку разделить на '=', но это довольно надуманно. Попытка задать хорошие вопросы для будущих пользователей SO. –

+1

Выведенный результат почти наверняка является нормальным массивом с одним элементом. Итак, первым шагом является 'obj = output [0]'. После этого я готов поспорить на 'obj.name',' obj.addr' и т. Д., Будет работать нормально. –

ответ

0

Попробуйте это:

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"]] 
+0

Спасибо, это полезно, когда прямые методы недоступны для доступа к данным. В моем случае, однако, люди выше были правильными - я просто не понимал, как получить доступ к объекту, с которым я работал. –

 Смежные вопросы

  • Нет связанных вопросов^_^