使用 jq 合并具有公共键的对象的 属性 个值
Merging property values of objects with common key with jq
我有一个包含 2 个属性的对象数组,比如“键”和“值”:
[
{key: 1, value: a},
{key: 2, value: b},
{key: 1, value: c}
]
现在,我想合并具有相同“键”属性 值的对象的“值”属性的值。即把之前的数组转化为:
[
{key: 1, value: [a, c]},
{key: 2, value: [b]}
]
我试过类似的方法:
$ echo '[{"key": "1", "val": "a"}, {"key": "2", "val": "b"}, {"key": "1", "val": "c"}]' | jq '. | group_by(.["key"]) | .[] | reduce .[] as $in ({"val": []}; {"key": $in.key, "val": [$in.val] + .["val"]})'
但它触发了 jq 语法错误,我不知道为什么。我卡住了。
有什么想法吗?
谢谢
B
您使用 reduce
的方法可以净化为
jq 'group_by(.["key"]) | .[] |= reduce .[] as $in (
{value: []}; .key = $in.key | .value += [$in.value]
)'
[
{
"value": [
"a",
"c"
],
"key": 1
},
{
"value": [
"b"
],
"key": 2
}
]
另一种使用 map
的方法是
jq 'group_by(.key) | map({key: .[0].key, value: map(.value)})'
[
{
"key": 1,
"value": [
"a",
"c"
]
},
{
"key": 2,
"value": [
"b"
]
}
]
我有一个包含 2 个属性的对象数组,比如“键”和“值”:
[
{key: 1, value: a},
{key: 2, value: b},
{key: 1, value: c}
]
现在,我想合并具有相同“键”属性 值的对象的“值”属性的值。即把之前的数组转化为:
[
{key: 1, value: [a, c]},
{key: 2, value: [b]}
]
我试过类似的方法:
$ echo '[{"key": "1", "val": "a"}, {"key": "2", "val": "b"}, {"key": "1", "val": "c"}]' | jq '. | group_by(.["key"]) | .[] | reduce .[] as $in ({"val": []}; {"key": $in.key, "val": [$in.val] + .["val"]})'
但它触发了 jq 语法错误,我不知道为什么。我卡住了。
有什么想法吗?
谢谢
B
您使用 reduce
的方法可以净化为
jq 'group_by(.["key"]) | .[] |= reduce .[] as $in (
{value: []}; .key = $in.key | .value += [$in.value]
)'
[
{
"value": [
"a",
"c"
],
"key": 1
},
{
"value": [
"b"
],
"key": 2
}
]
另一种使用 map
的方法是
jq 'group_by(.key) | map({key: .[0].key, value: map(.value)})'
[
{
"key": 1,
"value": [
"a",
"c"
]
},
{
"key": 2,
"value": [
"b"
]
}
]