2016-06-17 57 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和滤波器红宝石之外。新的数组中的元素将包含 “值”(例如假, “李四”,“10.10.10.10)

+0

请阅读 “[MCVE]” 我们所需要的。看看你的代码试图解决这个问题,你从API接收到的“Output”部分是什么?你如何查看数据? –

+0

是的,输出是API返回的数组,我使用'pretty print',但variable.inspect会返回相同的内容,我一直在问你:如果我真的没有共享代码,我该如何提供一个满足最小,完整和可验证的问题,例如,I知道我不能使用数组作为键/值对来访问这些数据,我可以显示它t数组没有任何方法来做到这一点,但这不会有帮助。我可以在'='上显示一个尝试,但这是非常人为的。试图为未来的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

谢谢,当直接方法不可用于访问数据时,这非常有用。就我而言,上面的人是正确的 - 我只是不明白如何访问我正在使用的对象。 –

相关问题