如何通过对JQ进行分组来合并JSON对象 [英] How to merge json objects by grouping on key with jq

查看:91
本文介绍了如何通过对JQ进行分组来合并JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要在命令行上合并的JSON列表.

I have a JSON list which I want to merge on command line .

[
 {
   "ipaddress": "10.10.10.222",
   "name": "alice"
 },
 {
   "ipaddress": "10.20.20.77",
   "name": "bob"
 },
 {
   "version": "6.7",
   "name": "alice"
 },
 {
   "version": "5.2.2",
   "name": "bob"
 }
]

预期输出:

{"name": "alice", "ipaddress": "10.10.10.222", "version": "6.7"},
{"name": "bob", "ipaddress": "10.20.20.77", "version": "5.2.2"}

你能帮我吗?谢谢你. 泊位

can you help me? Thank you. bernd

推荐答案

jq -c 'group_by(.name)[]|add' input.json

产生JSON对象流(即不插入逗号).

produces a stream of the JSON objects (i.e. without intervening commas).

更好的是完全避免使用group_by/1,因为它涉及一种排序方式:

Better yet would be to avoid group_by/1 altogether as it involves a sort:

def add_by(f):
  reduce .[] as $x ({}; ($x|f) as $f | .[$f] += [$x])
  | [.[] | add];

add_by(.name)

这篇关于如何通过对JQ进行分组来合并JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆