如何使用 jq 合并/连接/连接具有相同键的值

Nit*_*inS 6 merge json join concatenation jq

我需要按键聚合值。JSON 输入示例为:

$ cat json | jq 
[
  {
    "key": "john",
    "value": "ontario"
  },
  {
    "key": "ryan",
    "value": "chicago"
  },
  {
    "key": "ryan",
    "value": "illinois"
  },
  {
    "key": "john",
    "value": "toronto"
  },
]
Run Code Online (Sandbox Code Playgroud)

是否可能,如果可以,如何使用相同的键合并/连接/连接值,以便结果为:

[
  {
    "key": "john",
    "value": "toronto ontario"
  },
  {
    "key": "ryan",
    "value": "illinois chicago"
  },
]
Run Code Online (Sandbox Code Playgroud)

我专门针对 JQ 是因为它在 cfengine 中易于使用。

Jef*_*ado 5

按键对对进行分组,然后组合值。

group_by(.key) | map({key:.[0].key,value:(map(.value) | join(" "))})
Run Code Online (Sandbox Code Playgroud)