json - 在 json 中没有嵌套数组的情况下哈希到 json

标签 json ruby

我正在从三个数组中生成一个散列,然后尝试构建一个 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

将自定义哈希分配给(A1A2A3)。

之后你可以存储它并像 { 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/

相关文章:

ruby-on-rails - 有人在没有任何框架的情况下使用 ruby​​ 吗?

c# - 从 AJAX 服务返回大型 JSON 文件 - WCF

java - 如何在 spring 中从 JSON 输入中捕获整数值?

javascript - 如何在数据网格中显示由具有属性和值的对象组成的数组?

javascript - 添加到可能存在或可能不存在的 json 属性

Ruby:带 -pe 的简单命令行不起作用

ruby 将带有子文件夹的文件夹复制到目标位置

ruby - 如何从哈希值中获取所有可能的组合

ruby-on-rails - 在 RSpec 中使用 Thread.new 测试并发性

json - 在 python 中创建一个没有 Flask 的 REST API