2015-11-26 150 views
1

這些是紅寶石散列的樣本響應。搜索嵌套散列

如: -

find abcd1234

應該給我

我能找到,但它不是sufficent

我喜歡這些和列表的......響應繼續走下去不同值但結構相同

[ 
    { 
    "addon_service": { 
     "id": "-89ab-cdef-0123-456789abcdef", 
     "name": "heroku-postgresql" 
    }, 
    "config_vars": [ 
     "FOO", 
     "BAZ" 
    ], 
    "created_at": "2012-01-01T12:00:00Z", 
    "id": "-89ab-cdef-0123-456789abcdef", 
    "name": "acme-inc-primary-database", 
    "plan": { 
     "id": "-89ab-cdef-0123-456789abcdef", 
     "name": "heroku-postgresql:dev" 
    }, 
    "app": { 
     "id"=>"342uo23iu4io23u4oi2u34", 
     "name"=>"heroku-staging"}, 
    }, 
    "provider_id": "abcd1234", 
    "updated_at": "2012-01-01T12:00:00Z", 
    "web_url": "https://postgres.heroku.com/databases/-89ab-cdef-0123-456789abcdef" 
    } ......... 
] 

任何人都可以知道如何抓住那些?

回答

1

可以遍歷所有的數組元素(散),並顯示其內容,如果哈希滿足您的要求:

element_found = 0 

YOUR_DATA.each do |element| 
    if element["provider_id"].match(/abcd1234/) 
    element_found += 1 
    puts "addon_service: #{element['addon_service']['name']}" 
    puts "app: #{element['app']['name']}" 
    end 
end 

if element_found == 0 puts "Sorry match didn't found" 
+0

未定義的方法'provider_id'我不這麼認爲我們可以這樣做 – Gandalf

+0

所以你的數據實際上是一個包含哈希對象或數組的字符串的數組? –

+0

它的散列陣列某物內部像 [{........ }, {......} , ..........等等.... ] – Gandalf

0

由於數組的元素是散列,所以可以通過匹配所需的鍵來選擇合適的元素。

select {|app| app[:provider_id] == "abcd1234"} 

您是否知道一旦您選擇了該元素將如何處理? 我認爲你想要散列中的一些項目,但不是全部。 這可能是這樣的:

select {|app| app[:provider_id] == "abcd1234"}.map {|app| app.select {|key, v| [:addon_service, :app].include?(key) } } 
+0

它返回空'[]' – Gandalf