JQ 根据键组合 json 个映射数组
JQ combine array of json maps based on keys
我的 json 如下所示
[
{
"100": "ONE",
"200": "TWO"
},
{
"100": "1",
"200": "2"
}
]
我期待以下输出
{
"1": "ONE",
"2": "TWO"
}
我在这里找到的答案很少,但都有静态键,但在我的例子中,键是动态的
另一个例子
{
"apiVersion": "v1",
"data": {
"bac6f56f-101c-26da-edfa-c08e6622a337": "1"
},
"kind": "ConfigMap",
"metadata": {
"annotations": {
"bac6f56f-101c-26da-edfa-c08e6622a337": "restart"
},
"creationTimestamp": "2020-06-25T14:53:06Z",
"uid": "7b1dfc3a-1357-400e-b750-a1ff98a204b9"
}
}
预期输出为
{"restart":"1"}
这是一种方法:
. as [$V, $K]
| reduce ($K | keys_unsorted)[] as $k ({};
. + {($K[$k]): $V[$k]}
)
这将遍历第二个对象的键,检索与两个对象中每个键关联的值,并将它们配对成一个新对象。并且可以通过更改
来适应您的第二个示例
. as [$V, $K]
到
. as {data: $V, metadata: {annotations: $K}}
这是第一个问题的无减少解决方案,希望它也能阐明一般方法:
.[0] as $dict
| .[1]
| with_entries( {value: $dict[.key], key: (.value|tostring) } )
第二个问题的解决方案
使用上述方法,我们只需调整前两行:
.data as $dict
| .metadata.annotations
| with_entries( {value: $dict[.key], key: (.value|tostring) } )
我的 json 如下所示
[
{
"100": "ONE",
"200": "TWO"
},
{
"100": "1",
"200": "2"
}
]
我期待以下输出
{
"1": "ONE",
"2": "TWO"
}
我在这里找到的答案很少,但都有静态键,但在我的例子中,键是动态的
另一个例子
{
"apiVersion": "v1",
"data": {
"bac6f56f-101c-26da-edfa-c08e6622a337": "1"
},
"kind": "ConfigMap",
"metadata": {
"annotations": {
"bac6f56f-101c-26da-edfa-c08e6622a337": "restart"
},
"creationTimestamp": "2020-06-25T14:53:06Z",
"uid": "7b1dfc3a-1357-400e-b750-a1ff98a204b9"
}
}
预期输出为
{"restart":"1"}
这是一种方法:
. as [$V, $K]
| reduce ($K | keys_unsorted)[] as $k ({};
. + {($K[$k]): $V[$k]}
)
这将遍历第二个对象的键,检索与两个对象中每个键关联的值,并将它们配对成一个新对象。并且可以通过更改
来适应您的第二个示例. as [$V, $K]
到
. as {data: $V, metadata: {annotations: $K}}
这是第一个问题的无减少解决方案,希望它也能阐明一般方法:
.[0] as $dict
| .[1]
| with_entries( {value: $dict[.key], key: (.value|tostring) } )
第二个问题的解决方案
使用上述方法,我们只需调整前两行:
.data as $dict
| .metadata.annotations
| with_entries( {value: $dict[.key], key: (.value|tostring) } )