繁体   English   中英

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

[英]jq - flatten parent objects into children

我有以下需要重塑的源 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 但我也需要密钥,而不仅仅是值。

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

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

在线演示

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

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

jqplay - 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM