【发布时间】:2018-06-02 03:14:07
【问题描述】:
我正在寻找有效的方法来在大型 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 新手(包括我自己)仍然可以阅读的内容的奖励积分。
FWIW,我在路上用来帮助我的参考资料,以防他们帮助别人:
【问题讨论】:
标签: json object select nested jq