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

问题描述

我有以下需要重塑的源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","id": "54209","message": "foobar 1"
  },{
    "group": "A","id": "76548","message": "foobar 2"
  },{
    "group": "B","id": "54593","message": "foobar 3"
  },"id": "20359","message": "foobar 4"
  }
]

我基本上想要一个包含所有子事件数组但它们的父对象嵌入其中的单个数组。 我很接近这个问题的一个例子:https://github.com/stedolan/jq/issues/646。但是我还需要键,而不仅仅是值。

解决方法

将除事件以外的所有字段从根复制到每个 event ,并将结果对象放入数组中。

jq -n '[ inputs | .events[] + del(.events) ]'

Online demo

,

几乎与Oguz的回答逻辑相同,使用with_entries()从根目录中删除事件并单独添加字段

jq -n '[ inputs | with_entries(select(.key != "events")) + (.events[]) ]'

jqplay - Demo