gpt4 book ai didi

json - 使用 JQ 从 JSON 中选择特定的、任意嵌套的对象

转载 作者:行者123 更新时间:2023-12-03 16:14:51 25 4
gpt4 key购买 nike

我正在寻找有效的方法来搜索与过滤器匹配的“子对象”的大型 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,我在途中用来帮助我的引用资料,以防他们帮助他人:
  • Select objects based on value of variable in object using jq
  • How to use jq to find all paths to a certain key
  • Recursive search values by key
  • 最佳答案

    对于小型到中等大小的 JSON 输入,您使用 .. 走在正确的轨道上
    但您似乎要选择 objects ,像这样:

    .. | objects | select(.class=="FINDME"?) | .id

    对于非常大的 JSON 文档,这可能需要太多内存,因此了解 jq 的流解析器可能是值得的。不幸的是,它更难使用,所以我建议尝试上述方法,如果您有兴趣,请查看有关 --stream 的文档的常用位置。选项。

    关于json - 使用 JQ 从 JSON 中选择特定的、任意嵌套的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891145/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com