Arrays 过滤及;对对象数组进行排序,然后只输出每个对象的一个属性
我有JSON,它以以下格式动态呈现给我:Arrays 过滤及;对对象数组进行排序,然后只输出每个对象的一个属性,arrays,json,sorting,boolean,jq,Arrays,Json,Sorting,Boolean,Jq,我有JSON,它以以下格式动态呈现给我: { "world": 583, "peace": [ { "id": "Happy", "valid": true, "version": "9" }, {
{
"world": 583,
"peace": [
{
"id": "Happy",
"valid": true,
"version": "9"
},
{
"id": "Old",
"valid": false,
"version": "2020"
},
{
"id": "New",
"valid": true,
"version": "2021"
},
{
"id": "Year",
"valid": true,
"version": "5"
}
]
}
我是全新的to,我已经阅读了教程和手册,以及这里关于堆栈溢出的几个问题,包括:
我想使用jq
输出所有有效的id(“valid”
=true),并按id对输出进行排序
因此,在本例中,我希望输出为:
Happy
New
Year
到目前为止,我已经:
jq'..|.peace[]选择(.valid)|=排序依据(.id)
但这会产生一个无法用字符串“id”索引字符串的错误
我怎样才能做到这一点
谢谢你,新年快乐 保持.peace
数组的完整性以进行筛选和排序,然后将其分离:
jq --raw-output '.peace | map(select(.valid).id) | sort[]' <f.json>
^ ^ ^ ^
A B C D
jq——原始输出“.peace |映射(选择(.valid).id)|排序[]”
^ ^ ^ ^
A、B、C、D
其中:
- A:保持阵列完整
- B:map+select=filter&keep
id
only
- C:排序结果(这是字符串列表(即ID))
- D:“分散”阵列中的每个项目
--原始输出
将输出为“文本”而不是字符串,例如快乐
而不是快乐
jq可玩小提琴
确认:通过@peak suggestion我刚刚在一个完整的数据集上运行了您慷慨提供的内容,这个答案得到了极大的改进。这是一种享受。非常感谢。现在,我需要花一个小时来研究您所做的工作,以完全理解它。因为目标是按.id排序,所以首先提取id可能会更有效一些。作为附带福利,您可以获得一个较短的程序:jq-r'.peace | map(select(.valid).id)| sort[]”
@peak谢谢。我不知道你可以在选择后立即阅读。同意这看起来确实更好。select(.valid).id
只是select(.valid)|.id
@peak Done的缩写。多谢