【问题标题】:Searching nested hash搜索嵌套哈希
【发布时间】:2015-11-26 00:13:38
【问题描述】:

这些是 ruby​​ 中哈希的示例响应。

例如:-

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"
  } .........
] 

有人知道怎么拿吗?

【问题讨论】:

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


    【解决方案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"
    

    【讨论】:

    • 未定义方法 provider_id 我不认为我们可以这样做
    • 所以你的数据实际上是一个包含哈希对象的数组还是一个字符串数组?
    • 未定义方法addon_service
    • 我觉得应该在数组里面
    • @Gandalf 你更新了我的所有代码了吗?我使用哈希样式element['addon_service']['name'],这里没有方法。
    【解决方案2】:

    由于数组的元素是散列,您可以通过匹配所需的键来选择合适的元素。

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

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

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

    【讨论】:

    • 返回空[]
    猜你喜欢
    • 2013-02-08
    • 2018-07-19
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多