我想在 JSON 文件中搜索某些键或值,并让它打印找到它的位置。
例如,当使用jq
打印我的Firefox的extensions.json时,我得到类似这样的东西(这里使用“...”跳过长部分):
{
"schemaVersion": 31,
"addons": [
{
"id": "wetransfer@extensions.thunderbird.net",
"syncGUID": "{e6369308-1efc-40fd-aa5f-38da7b20df9b}",
"version": "2.0.0",
...
},
{
...
}
]
}
假设我想搜索“wetransfer@extensions.thunderbird.net”,并且想要一个输出来显示它是在哪里找到的,如下所示:
{ "addons": [ {"id": "wetransfer@extensions.thunderbird.net"} ] }
有没有办法使用 jq
或其他 json 工具来获取它?
我还尝试简单地列出该文件中的各种 id
,并希望我能用 jq '.id'
获取它,但只是返回null
,因为它显然需要完整路径。
换句话说,我正在寻找一个命令行 json 解析器,我可以以类似于 Xpath 工具的方式使用它
最佳答案
path()
函数派上用场:
$ jq -c 'path(.. | select(. == "wetransfer@extensions.thunderbird.net"))' input.json
["addons",0,"id"]
结果路径被解释为“在初始对象的 addons 字段中,第一个数组元素的 id 字段匹配”。您可以将它与 getpath()
、setpath()
、delpaths()
等一起使用来获取或操作它所描述的值。
关于json - 如何使用 Bash 在 json 文件中查找内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62052536/