将 jq - 将父对象展开为子对象

5

我有以下源JSON,需要进行重塑:

{
  "group": "A",
  "name": "abc",
  "events": [
    {
      "id": "54209",
      "message": "foobar 1"
    },
    {
      "id": "76548",
      "message": "foobar 2"
    }
  ]
}
{
  "group": "B",
  "name": "def",
  "events": [
    {
      "id": "54593",
      "message": "foobar 3"
    },
    {
      "id": "20359",
      "message": "foobar 4"
    }
  ]
}

我该如何得到以下输出:
[
  {
    "group": "A",
    "name": "abc",
    "id": "54209",
    "message": "foobar 1"
  },
  {
    "group": "A",
    "name": "abc",
    "id": "76548",
    "message": "foobar 2"
  },
  {
    "group": "B",
    "name": "def",
    "id": "54593",
    "message": "foobar 3"
  },
  {
    "group": "B",
    "name": "def",
    "id": "20359",
    "message": "foobar 4"
  }
]

我基本上想要一个包含所有子事件数组的单个数组,但它们的父对象嵌入到它们中。

我从这个问题的示例中很接近:https://github.com/stedolan/jq/issues/646。但我还需要键,而不仅仅是值。

2个回答

6
将除了根目录下的 events 字段之外的所有字段复制到每个 event 中,并将生成的对象放入数组中。
jq -n '[ inputs | .events[] + del(.events) ]'

在线演示


4
几乎与Oguz的答案相同,使用with_entries()从根中删除事件并仅添加字段。
jq -n '[ inputs | with_entries(select(.key != "events")) + (.events[]) ]'

jqplay - 演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接