Ruby - 从嵌套的哈希数组中提取数组

时间:2018-02-06 10:40:08

标签: arrays ruby hash

我正在尝试从以下内容获取哈希:

 response: 
 {"result": [
 {
  "LEID": "123",
  "result": [
    {
      "CCID": "456",
      "result": [
        {
          "Amount": 10000,
          "NNID": "789"
        }
      ]
    },
    {
      "CCID": "ABC",
      "result": [
        {
          "Amount": 5000,
          "NNID": "DEF"
        }
      ]
    }
  ]
}
]
}

我要做的是获得以下内容:

{ “LEID”:123, “CCID”:456, “NNID”:789}

{ “LEID”:123, “CCID”:ABC “NNID”:DEF}

所以得到三个LEID,CCID和NNID

到目前为止我所拥有的是:

  LEID_collection = response['result']
  LEID = LEID_collection.map {|h| h['LEID']}
  LEID = LEID.reduce
  CCID_collection = LEID_collection.reduce
  CCIDs = CCID_collection['result'].map {|h|h['CCID']}
  CCID1 = CCIDs[0]
  CCID2 = CCIDs[1]
  CCIDs = CCID_collection['result']
  test = CCIDs.first.keys.zip(CCIDs.map(&:values).transpose).to_h
  test2 = test['result']
  test3 = test2.flatten
  test4 = test3.map {|h| h['NNID']}
  NNID1 = test4[0]
  NNID2 = test4[1]

  hash1 = Hash["LEID", LEID, "CCID", CCID1, "NNID", NNID1]
  puts "hash 1 :" +  hash1.to_s
  hash2 = Hash["LEID", LEID, "CCID", CCID2, "NNID", NNID2]
  puts "hash 2 :" +  hash2.to_s

这得到了我想要的东西,但实际上并不是动态的...有没有更好的方法?

对不起这是多么复杂,我只是不确定如何以其他方式解释它。很高兴回答任何问题。

1 个答案:

答案 0 :(得分:1)

如果您知道您将始终拥有此结构,并且您使用ruby> = 2.3.0, 然后你可以使用dig方法缩短内容:

collection = response['result'].first
trios = collection['result'].map do |ccid|
  {
    'LEID' => collection['LEID'],
    'CCID' => ccid['CCID'],
    'NNID' => ccid.dig('CCID', 'NNID')
  }
end

它只有一点点短,但希望更容易阅读整体。