json - 如何使用 Bash 在 json 文件中查找内容

标签 json jq

我想在 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/

相关文章:

java - 将 JSON 的内存(映射)表示形式转换为 POJO(可能使用 Jackson)

flash - 将 JSON 转换为自定义 ActionScript 对象?

jquery - 使用 id 打开 Kendo UI TreeView 节点

json - 如何解码其中包含不同类型值的 json 数组

arrays - 使用 jq 将两个 JSON 数组合并到一个文件中

bash - 提取jq中的路径名组件

javascript - jquery检查json数据

json - 如何使用jq解析一个json对象数组

json - 如何在JQ中展平多维数组

json - 使用jq将数组中的偶数索引转换为json中的键值对