【发布时间】:2020-09-15 20:56:55
【问题描述】:
如何重新格式化 JSON,根据选择条件创建一个新数组并将值作为键?
这是 json 文件的一个片段:
[
{
"Header": {
"Tenant": "Tenant1"
},
"Body": {
"values": [
{
"id": "ca95",
"name": "Property1"
},
{
"id": "b126",
"name": "Property2"
},
{
"id": "aec0",
"name": "Property3"
},
{
"id": "a62b",
"name": "Property4"
}
]
}
},
{
"Header": {
"Tenant": "Tenant2"
},
"Body": {
"values": [
{
"id": "ca95",
"name": "Property1"
},
{
"id": "b4cd",
"name": "Property4"
}
]
}
}
]
键 Header.Tenant 和 Body.values[].name 的值是唯一的,但 Body.values[].id 不是 - 对于 Property4 对应的来自同一对象的 "id" 是 a62b 用于 Tenant1,b4cd 用于 Tenant2。
我需要找出特定的"name/Property" 键/值存在多少个不同的对应"id" 和"Tenant",然后按"id" 的值对它们进行分组。
结果应如下所示:
[
{
"name": "Property1",
"ca95": [
"Tenant1",
"Tenant2"
]
},
{
"name": "Property2",
"b126": [
"Tenant1"
]
},
{
"name": "Property3",
"aec0": [
"Tenant1"
]
},
{
"name": "Property4",
"a62b": [
"Tenant1"
]
},
{
"name": "Property4",
"b4cd": [
"Tenant2"
]
}
]
如何用 jq 做到这一点?我想我应该使用 group_by 和/或 reduce?
谢谢
【问题讨论】:
标签: arrays json sorting group-by jq