我有一个像这样的JSON文件:
data.json
{
"ABCD": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ],
"EFGH": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ],
"IJKL": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ]
}
我想迭代键A1,B1,C1等,然后重写data.json文件,如下所示:
{
"ABCD": [ ["Ax", "Bx", "Cx", "Dx"], ["Ax", "Bx", "Cx", "Dx"] ],
"EFGH": [ ["Ex", "Fx", "Gx", "Hx"], ["Ex", "Fx", "Gx", "Hx"] ],
"IJKL": [ ["Ix", "Jx", "Kx", "Lx"], ["Ix", "Jx", "Kx", "Lx"] ]
}
我该怎么做? 我之前从未使用过Ruby ...但我想从一些有用的脚本开始学习。
答案 0 :(得分:5)
Enumerable库中有许多技巧可以帮到这里:
require 'json'
data = JSON.load <<END
{
"ABCD": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ],
"EFGH": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ],
"IJKL": [ ["x", "x", "x", "x"], ["x", "x", "x", "x"] ]
}
END
reworked = Hash[
data.map do |key, values|
letters = key.chars
[ key, values.map { |a| letters.zip(a).map(&:join) }]
end
]
# => {"ABCD"=>[["Ax", "Bx", "Cx", "Dx"], ["Ax", "Bx", "Cx", "Dx"]], "EFGH"=>[["Ex", "Fx", "Gx", "Hx"], ["Ex", "Fx", "Gx", "Hx"]], "IJKL"=>[["Ix", "Jx", "Kx", "Lx"], ["Ix", "Jx", "Kx", "Lx"]]}
此处Hash[]
对于将一个哈希转换为另一个哈希很有用,map
用于重写列表中的每个元素。 zip
将两个数组组合在一起,就像拉链一样。 chars
是一种从字符串中提取单个字符的快捷方法。
如果您想将此内容写回文件:
File.open('output.json', 'w') do |f|
f.write(JSON.dump(reworked))
end