Arrays Ruby-从嵌套哈希数组中提取数组
我正在尝试从以下内容获取哈希:Arrays Ruby-从嵌套哈希数组中提取数组,arrays,ruby,hash,Arrays,Ruby,Hash,我正在尝试从以下内容获取哈希: response: {"result": [ { "LEID": "123", "result": [ { "CCID": "456", "result": [ { "Amount": 10000, "NNID": "789" } ] }, { "CCID": "ABC", "result":
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
这得到了我想要的,但真的不是动态的。。。还有更好的办法吗
对不起,这是多么复杂,我只是不知道如何解释它的任何其他方式。乐意回答任何问题 如果您知道您将始终使用这种结构,并且使用ruby>=2.3.0, 然后,您可以使用该方法缩短时间:
collection = response['result'].first
trios = collection['result'].map do |ccid|
{
'LEID' => collection['LEID'],
'CCID' => ccid['CCID'],
'NNID' => ccid.dig('CCID', 'NNID')
}
end
它只是稍微短一点,但希望更容易阅读整体 对不起,你是对的,我需要编辑我的评论,使用{}来显示我想要的是散列而不是数组-谢谢你指出这一点。对不起,我对这一切都不熟悉。谢谢你,我会看一看的-不幸的是,这只是第一步,因为我知道稍后我会在CCID下有更多的NNID…并且必须组成三个…但这可能是一个好的开始!如果需要,在2.3之前,您可以链接
。尝试(:[],:key)
作为:dig
的替代品。虽然不漂亮,但却能达到同样的目的。try
只在你心里起作用。