You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JQ遍历任意深度JSON对象搜索指定关键词?

jq 全域递归关键词搜索实现方案

完全可以通过jq实现不限嵌套深度的JSON全域关键词搜索,无需预先指定键路径,核心靠jq原生的递归遍历能力实现。

核心实现命令

通用搜索命令模板如下,替换关键词即可直接使用:

jq --arg kw "你要搜索的关键词" 'with_entries(select( .value | .. | strings | test($kw) ))' 目标json文件路径

命令逻辑说明

  • --arg kw "关键词":将搜索词作为参数传入jq,避免特殊字符转义问题
  • with_entries(select( ... )):遍历根对象下的所有顶层键值对,仅保留符合匹配规则的条目
  • .value | ..:递归遍历当前条目值下的所有子节点,无论嵌套多少层对象、数组都可完整覆盖
  • strings:仅筛选节点中的字符串类型值参与匹配,避免数字、布尔、空值类型触发匹配错误
  • test($kw):判断字符串是否包含搜索关键词,支持正则匹配;如果需要不区分大小写搜索,可改为test($kw; "i"),如果需要完全精确匹配字符串,替换为== $kw即可。

效果验证

使用问题中给出的示例JSON做测试:

  1. 搜索关键词horror,执行命令:
jq --arg kw "horror" 'with_entries(select( .value | .. | strings | test($kw) ))' demo.json

返回结果完全符合预期:

{
  "Book1": {
    "Genres": [
      "horror",
      "thriller",
      "drama"
    ],
    "Description": "Extremely scary book.",
    "Author": "Jane Doe"
  }
}
  1. 搜索关键词romantic,执行命令:
jq --arg kw "romantic" 'with_entries(select( .value | .. | strings | test($kw) ))' demo.json

返回结果符合需求:

{
  "Book2": {
    "Genres": [
      "Romance",
      "drama"
    ],
    "Description": "Very romantic book.",
    "Author": "John Doe"
  }
}

扩展说明

  • 该方案无嵌套深度限制,无论JSON结构里嵌了多少层对象、数组,都能遍历到所有字符串节点
  • 如果需要筛选非顶层的匹配节点,只需要调整with_entries对应的作用层级即可,核心递归匹配逻辑.. | strings | test($kw)可以直接复用
  • 如果需要匹配数字、布尔值等非字符串内容,删除strings筛选器,调整对应匹配规则即可,比如搜索值为2024的数字节点,可写为.. | select(. == 2024)。

内容的提问来源于stack exchange,提问作者bravesheeptribe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:51:18