我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。
require 'json'
A = [['A1', 'A2', 'A3'], [ "A1_xfactor", "A2_xfactor", "A3_xfactor"], ["A1_pull", "A2_pull", "A3_pull"]]
kl = { 'obj' => A[0].zip(A[1],A[2]).map { |k, v,l| { 'f1' => k, 'f2' => v, 'xfactor' => l} }}.to_json
puts kl
输出
{
"obj": [{
"f1": "A1",
"f2": "A1_xfactor",
"xfactor": "A1_pull"
}, {
"f1": "A2",
"f2": "A2_xfactor",
"xfactor": "A2_pull"
}, {
"f1": "A3",
"f2": "A3_xfactor",
"xfactor": "A3_pull"
}]
}
而不是数组,我希望它没有数组,并且 F1 必须作为一个单独的对象出现。
{
"obj": {
"A1": {
"f2": "A1_xfactor",
"xfactor": "A1_pull"
},
"A2": {
"f2": "A2_xfactor",
"xfactor": "A2_pull"
},
"A3": {
"f2": "A3_xfactor",
"xfactor": "A3_pull"
}
}
}
最佳答案
您可以尝试通过压缩其每个元素来减少 A
。
然后使用 each_with_object
遍历每个数组数组,对于每个元素,将其第一个元素生成为 key
,将第二个元素生成为 f2
并且数组中的第二个/最后一个元素作为 factor
。
将自定义哈希分配给键
(A1
、A2
、A3
)。
之后你可以存储它并像 { obj: result }
一样使用。
A.reduce(&:zip).each_with_object({}) do |((key, f2), factor), hash|
hash[key] = { f2: f2, xfactor: factor }
end
# {"A1"=>{:f2=>"A1_xfactor", :xfactor=>"A1_pull"},
# "A2"=>{:f2=>"A2_xfactor", :xfactor=>"A2_pull"},
# "A3"=>{:f2=>"A3_xfactor", :xfactor=>"A3_pull"}}
关于json - 在 json 中没有嵌套数组的情况下哈希到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510282/