2016-06-17 58 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

謝謝,當直接方法不可用於訪問數據時,這非常有用。就我而言,上面的人是正確的 - 我只是不明白如何訪問我正在使用的對象。 –

相關問題