我正在尝试从以下内容获取哈希:
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
这得到了我想要的东西,但实际上并不是动态的...有没有更好的方法?
对不起这是多么复杂,我只是不确定如何以其他方式解释它。很高兴回答任何问题。
答案 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
它只有一点点短,但希望更容易阅读整体。