json - jq 使用嵌套数组元素的值进行排序
问题描述
我需要一些帮助来jq
对元素数组进行排序,其中每个元素都包含一个嵌套
tags
的元素数组。我的输入 JSON 如下所示:
{
"result": [
{
"name": "ct-1",
"tags": [
{
"key": "service_name",
"value": "BaseCT"
},
{
"key": "sequence",
"value": "bb"
}
]
},
{
"name": "ct-2",
"tags": [
{
"key": "service_name",
"value": "BaseCT"
},
{
"key": "sequence",
"value": "aa"
}
]
}
]
}
我想使用sequence
嵌套数组中标记的值进行排序tags
,以便输出如下所示:
{
"result": [
{
"name": "ct-2",
"tags": [
{
"key": "service_name",
"value": "BaseCT"
},
{
"key": "sequence",
"value": "aa"
}
]
},
{
"name": "ct-1",
"tags": [
{
"key": "service_name",
"value": "BaseCT"
},
{
"key": "sequence",
"value": "bb"
}
]
}
]
}
我尝试了以下jq
命令:
$ jq '.result |= ([.[] | .tags[] | select(.key == "sequence") | .value] | sort_by(.))' input.json
但我得到以下结果:
{
"result": [
"aa",
"bb"
]
}
如果您知道如何处理这种情况,请告诉我。
解决方案
from_entries
将键值对数组转换为对象,您可以sort_by
像这样使用它:
.result |= sort_by(.tags | from_entries | .sequence)
推荐阅读
- hibernate - How to enforce min/max/exact size of relationship collection in OneToMany and ManyToMany mappings
- javascript - 我的 Axios 邮政编码正在更改邮政数据?
- .net - 无法从 C# 中的 PEM 文件创建 CngKey
- ios - UIViewControllerRepresentable - “非最终类不能满足协议” - SwiftUI
- r - 在 data.table 中使用“或”进行条件行聚合
- python - 无法将函数应用于熊猫数据框中的选定列
- javascript - 我怎样才能使这个 Codepen 项目成为我网站的背景?
- javascript - 如何格式化仅包含日期和月份的给定日期?
- python - Jenkins API HTTPError: 401 Client Error: Unauthorized for url
- javascript - 字符串从空格开始拆分