如何在JQ中展平多维数组

use*_*391 2 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
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像这样:

{
  "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
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我该如何使用jq来实现这一目标?

我想要一个对象:

  1. 与关键“帐户”
  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
Run Code Online (Sandbox Code Playgroud)

pmf*_*pmf 5

将数组的每个项目添加.users到单个{group}项目中。.accounts使用为数组中的所有项目执行此操作map,并使用 update-assignment 就地执行此操作|=

jq '.accounts |= map({group} + .users[])' file.json
Run Code Online (Sandbox Code Playgroud)
{
  "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
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

演示