我有一个像这样的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"] ]
}
Run Code Online (Sandbox Code Playgroud)
我想遍历键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"] ]
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我之前从未使用过Ruby ...但我想从一些有用的脚本开始学习.
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"]]}
Run Code Online (Sandbox Code Playgroud)
这Hash[]对于将一个哈希转换为另一个哈希非常有用,并且map用于重写列表中的每个元素.zip将两个阵列组合在一起就像一个拉链.chars是一种从字符串中提取单个字符的快捷方法.
如果要将其写回文件:
File.open('output.json', 'w') do |f|
f.write(JSON.dump(reworked))
end
Run Code Online (Sandbox Code Playgroud)