如何将平面散列转换为条件键后的嵌套?
How to convert flat hash into nested after conditional key?
我正在尝试将 xml 转换为 json 结构。我得到了所有行,首先将其提取为 header 并将其与接下来的所有行一起压缩,但是我必须在 word 属性之后嵌套键,该怎么做?
当前步骤:
变量:
header = ["id",
"groupName",
"words",
"Unit",
"Name",
"Image"]
rows = [["1",
"gr 1",
nil,
"1",
"Test",
"test.png"],
["1",
"gr 1",
nil,
"23",
"Taefawe",
"adf.png"]]
当前输出=>
[{"id"=>"1",
"groupName"=>"Unit 1",
"words"=>nil,
"Unit"=>"1",
"Name"=>"Test",
"Image"=>"test.png"},
{"id"=>"1",
"groupName"=>"gr 1",
"words"=>nil,
"Unit"=>"23",
"Name"=>"Taefawe",
"Image"=>"adf.png"}]
期望:
[{"id"=>"1",
"groupName"=>"Unit 1",
"words"=>{
"Unit"=>"1",
"Name"=>"Test",
"Image"=>"test.png"
}
},
{"id"=>"1",
"groupName"=>"gr 1",
"words"=> {
"Unit"=>"23",
"Name"=>"Taefawe",
"Image"=>"adf.png"
}}]
当前代码:
rows = doc.sheets.first.rows
header = rows.shift
out = []
rows.each do |row|
out << Hash[header.zip(row.map{|val| val})]
end
如果您的 headers 始终不变,我认为最好的方法是:
rows.inject([]) do |res, row|
res << {"id" => row[0],
"groupName" => row[1],
"words" => {
"Unit" => row[3],
"Name" => row[4],
"Image" => row[5]}
}
end
或者您也可以将 hash
中的 key
常量替换为 header[index]
。
如果你把它恢复为真 xml 你应该可以使用:
Hash.from_xml(doc.sheets)
我正在尝试将 xml 转换为 json 结构。我得到了所有行,首先将其提取为 header 并将其与接下来的所有行一起压缩,但是我必须在 word 属性之后嵌套键,该怎么做?
当前步骤:
变量:
header = ["id",
"groupName",
"words",
"Unit",
"Name",
"Image"]
rows = [["1",
"gr 1",
nil,
"1",
"Test",
"test.png"],
["1",
"gr 1",
nil,
"23",
"Taefawe",
"adf.png"]]
当前输出=>
[{"id"=>"1",
"groupName"=>"Unit 1",
"words"=>nil,
"Unit"=>"1",
"Name"=>"Test",
"Image"=>"test.png"},
{"id"=>"1",
"groupName"=>"gr 1",
"words"=>nil,
"Unit"=>"23",
"Name"=>"Taefawe",
"Image"=>"adf.png"}]
期望:
[{"id"=>"1",
"groupName"=>"Unit 1",
"words"=>{
"Unit"=>"1",
"Name"=>"Test",
"Image"=>"test.png"
}
},
{"id"=>"1",
"groupName"=>"gr 1",
"words"=> {
"Unit"=>"23",
"Name"=>"Taefawe",
"Image"=>"adf.png"
}}]
当前代码:
rows = doc.sheets.first.rows
header = rows.shift
out = []
rows.each do |row|
out << Hash[header.zip(row.map{|val| val})]
end
如果您的 headers 始终不变,我认为最好的方法是:
rows.inject([]) do |res, row|
res << {"id" => row[0],
"groupName" => row[1],
"words" => {
"Unit" => row[3],
"Name" => row[4],
"Image" => row[5]}
}
end
或者您也可以将 hash
中的 key
常量替换为 header[index]
。
如果你把它恢复为真 xml 你应该可以使用:
Hash.from_xml(doc.sheets)