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。但我也需要键,而不仅仅是值。
将除 events 之外的所有字段从根复制到每个 event,并将结果对象放入数组中。
jq -n '[ inputs | .events[] + del(.events) ]'
与 Oguz 的回答几乎相同的逻辑,使用 with_entries()
从根中删除事件并单独添加字段
jq -n '[ inputs | with_entries(select(.key != "events")) + (.events[]) ]'
我有以下来源 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。但我也需要键,而不仅仅是值。
将除 events 之外的所有字段从根复制到每个 event,并将结果对象放入数组中。
jq -n '[ inputs | .events[] + del(.events) ]'
与 Oguz 的回答几乎相同的逻辑,使用 with_entries()
从根中删除事件并单独添加字段
jq -n '[ inputs | with_entries(select(.key != "events")) + (.events[]) ]'