我试图将xml转换为json结构。我得到了所有的行,首先作为标题提取并用所有下一行压缩它,但我必须在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
答案 0 :(得分:2)
如果你把它作为真正的xml取回,你应该可以使用:
Hash.from_xml(doc.sheets)
答案 1 :(得分:1)
如果您的标题始终不变,那么我认为最好的方式是:
rows.inject([]) do |res, row|
res << {"id" => row[0],
"groupName" => row[1],
"words" => {
"Unit" => row[3],
"Name" => row[4],
"Image" => row[5]}
}
end
或者您也可以用key
替换hash
中的header[index]
常量。