搜索嵌套哈希

时间:2015-11-26 00:13:39

标签: ruby-on-rails arrays ruby json hash

这些是红宝石中哈希的样本响应。

例如: -

find abcd1234

应该给我

我能够找到,但这还不够

我有这样的反应和列表继续进行不同的值但相同的结构

[
  {
    "addon_service": {
      "id": "01234567-89ab-cdef-0123-456789abcdef",
      "name": "heroku-postgresql"
    },
    "config_vars": [
      "FOO",
      "BAZ"
    ],
    "created_at": "2012-01-01T12:00:00Z",
    "id": "01234567-89ab-cdef-0123-456789abcdef",
    "name": "acme-inc-primary-database",
    "plan": {
      "id": "01234567-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/01234567-89ab-cdef-0123-456789abcdef"
  } .........
] 

任何人都知道如何抓住这些吗?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

由于数组的元素是哈希值,您可以通过匹配所需的键来选择适当的键。

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

一旦你选择了元素,你知道如何处理它吗? 我想你想要哈希中的一些项目,但不是全部。 这可能看起来像:

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