json - 如何获得具有唯一值的输出,但仅使用重复键的最后一个实例 - unique_by
问题描述
我目前正在使用 jq 来解析一些 json。我想根据某个键检索唯一值。我遇到了unique_by
。它只是为 key 获取唯一值,name
但我仍然没有得到我想要的输出。据我了解,unique_by
查看键值name
并使用第一个实例,然后删除最终输出中的重复项。但是,我想获取最后一个重复键值name
并将其显示在最终输出中。
下面是我想要的输出的一个例子。是否可以这样做unique_by
或最好的方法是什么?
cat file.json
原始json:
[
{
"name": "app-fastly",
"tag": "20210825-95-448f024",
"image": "docker.io/repoxy/app-fastly:20210825-95-448f024"
},
{
"name": "app-lovely",
"tag": "20211004-2101-b6a256c",
"image": "ghcr.io/repox/app-lovely:20211004-2101-b6a256c"
},
{
"name": "app-lovely",
"tag": "20211007-6622-b3fooba",
"image": "ghcr.io/repoxy/app-lovely:20211007-6622-b3fooba"
},
{
"name": "app-dogwood",
"tag": "20210325-36-2a349e9",
"image": "docker.io/repoxy/app-dogwood:20210325-36-2a349e9"
}
]
Jq 命令:
cat file.json | jq 'unique_by( {name} )'
电流输出:
[
{
"name": "app-dogwood",
"tag": "20210325-36-2a349e9",
"image": "docker.io/repoxy/app-dogwood:20210325-36-2a349e9"
},
{
"name": "app-fastly",
"tag": "20210825-95-448f024",
"image": "docker.io/repoxy/app-fastly:20210825-95-448f024"
},
{
"name": "app-lovely",
"tag": "20211004-2101-b6a256c",
"image": "ghcr.io/repox/app-lovely:20211004-2101-b6a256c"
}
]
期望的输出:
[
{
"name": "app-dogwood",
"tag": "20210325-36-2a349e9",
"image": "docker.io/repoxy/app-dogwood:20210325-36-2a349e9"
},
{
"name": "app-fastly",
"tag": "20210825-95-448f024",
"image": "docker.io/repoxy/app-fastly:20210825-95-448f024"
},
{
"name": "app-lovely",
"tag": "20211007-6622-b3fooba",
"image": "ghcr.io/repoxy/app-lovely:20211007-6622-b3fooba"
}
]
解决方案
如果你想要最后一个唯一的项目,只需reverse
首先数组
jq 'reverse | unique_by( {name} )'
如果您想保留原始订单,请reverse
稍后再返回
jq 'reverse | unique_by( {name} ) | reverse'
推荐阅读
- jira - 为 Jira 中的问题添加颜色
- jquery - 更改表单选择时如何自动填充输入文本
- r - R中的函数,用于根据数据是否符合范围标准为数据分配值
- c++ - 如何在 Windows 控制台中禁用或检测模式更改?
- github - 通过 GitHub API 获取一个包的所有版本
- java - 是否可以使用 Hashmap 在 Java 中存储同一类的不同实例?
- rust - 如何使用 Rust 在 Substrate 中对帐户 ID 的十六进制字符串表示进行编码?
- continuous-integration - 在哪里放置 cypress 测试:使用前端代码还是自己的 repo?
- java - 如何在java中用给定的替换图替换一些单词?
- javascript - 在触摸设备上用 JS 替换 CSS :hover 到 :active