json - 如何在JQ中展平多维数组

标签 json jq

我有以下 JSON:

{
  "accounts": [
    {
      "group": 1,
      "users": [
        {
          "name": "John",
          "id": 1
        },
        {
          "name": "Jane",
          "id": 2
        }
      ]
    },
    {
      "group": 2,
      "users": [
        {
          "name": "Bob",
          "id": 3
        },
        {
          "name": "Mary",
          "id": 3
        }
      ]
    }
  ]
}

我希望输出如下所示:

{
  "accounts": [
    {
      "group": 1,
      "name": "John",
      "id": 1
    },
    {
      "group": 1,
      "name": "Jane",
      "id": 2
    },
    {
      "group": 2,
      "name": "Bob",
      "id": 3
    },
    {
      "group": 2,
      "name": "Mary",
      "id": 3
    }
  ]
}

如何使用 jq 来完成此操作?

我想要一个对象:

  1. 使用键“accounts”
  2. 包含“group”、“name”、“id”的元素

到目前为止,我已经尝试过jq --raw-output '.accounts[].group, .accounts[].users[].name, .accounts[].users[].id',但它给了我以下内容:

1
2
John
Jane
Bob
Mary
1
2
3
3

最佳答案

.users 数组的每个项目添加到单个 {group} 项目中。使用 map.accounts 数组中的所有项目执行此操作,并使用更新分配 |= 就地执行此操作:

jq '.accounts |= map({group} + .users[])' file.json
{
  "accounts": [
    {
      "group": 1,
      "name": "John",
      "id": 1
    },
    {
      "group": 1,
      "name": "Jane",
      "id": 2
    },
    {
      "group": 2,
      "name": "Bob",
      "id": 3
    },
    {
      "group": 2,
      "name": "Mary",
      "id": 3
    }
  ]
}

Demo

关于json - 如何在JQ中展平多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76230610/

相关文章:

json - 使用jq更新字典数组中的一个值

java - 类字段上的 @JsonProperty - 获取 JSON 中的重复字段

json - 为什么 OpenAI 图像生成 Api 在 Unity 中返回 400 错误请求?

php - 将 JSON 数据发布到外部 URL

javascript - NodeJS 后端 POST 数组项?

json - jq:根据参数切片数组

javascript - JSON 解析问题 : "q\r\nq"

function - 范围(2,5)和范围(2; 5)之间的区别

json - JQ 创建 JSON 键值对

json - 从单个输入生成多个JQ输出文档,修改每个结果