json 如何重建数组数据?

64jmpszr  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(87)

我有这个数据:

{
  "data": [
    {
      "a": 11,
      "b": 12,
      "c": 13
    },
    {
      "a": 21,
      "b": 22,
      "c": 23
    },
    {
      "a": 31,
      "b": 32,
      "c": 33
    }
  ]
}

我想把它整理成基于键名的数组,如下所示:

{
  "data": [
    {
      "a": [
        11,
        21,
        31
      ]
    },
    {
      "b": [
        12,
        22,
        32
      ]
    },
    {
      "c": [
        13,
        23,
        33
      ]
    }
  ]
}

对于这个例子,我们可以假设原始数组的每个元素都有相同的键集,只是它们的值不同。
下面的jq代码可以为选择键执行此操作:
一个二个一个一个
如何对所有键执行此操作?

oxalkeyp

oxalkeyp1#

一种方法是使用to_entries访问密钥,然后使用group_by进行分组,最后使用map构建最终结构:

.data |= (map(to_entries[]) | group_by(.key) | map({(first.key): map(.value)}))
{
  "data": [
    {
      "a": [
        11,
        21,
        31
      ]
    },
    {
      "b": [
        12,
        22,
        32
      ]
    },
    {
      "c": [
        13,
        23,
        33
      ]
    }
  ]
}

建议:您可以构建一个包含所有字段的对象,而不是使用具有单个字段的对象数组:
一个二个一个一个

相关问题