哈希到json,json中没有嵌套数组

哈希到json,json中没有嵌套数组,json,ruby,Json,Ruby,我将从三个数组中生成一个散列,然后尝试构造一个json。我成功地使用了json对象has数组 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' =>

我将从三个数组中生成一个散列,然后尝试构造一个json。我成功地使用了json对象has数组

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
,数组中的第二个/最后一个元素作为
因子

将自定义哈希分配给
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"}}
A.reduce(&:zip)
:我会记住的。