我正在寻找高效的方法来搜索一个大的JSON对象,以查找符合筛选条件的“子对象”(我想通过
select()
来实现)。然而,顶层JSON是一个包含任意嵌套的对象,包括更简单的值、对象和对象数组。例如:{
"name": "foo",
"class": "system",
"description": "top-level-thing",
"configuration": {
"status": "normal",
"uuid": "id"
},
"children": [
{
"id": "c1",
"class": "c1",
"children": [
{
"id": "c1.1",
"class": "c1.1"
},
{
"id": "c1.1",
"class": "FINDME"
}
]
},
{
"id": "c2",
"class": "FINDME"
}
],
"thing": {
"id": "c3",
"class": "FINDME"
}
}
我有一个解决方案,可以部分地实现我想要的(并且易于理解):
jq -r '.. | arrays | .[] | select(.class=="FINDME"?) | .id'
它返回:
c2
c1.1
...然而,它错过了c3
,并且改变了输出项的顺序。此外,我希望这个解决方案能够适用于潜在的非常大的JSON结构,我希望确保找到一个高效的解决方案。如果有什么东西可以让jq
新手(包括我自己)更容易理解,那就更好了。
顺便说一下,以下是我在路上使用的参考资料,以防对其他人有所帮助: