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

如何使用jq命令过滤JSON,保留路径或值含指定模式的内容?

符合需求的jq命令

要实现过滤JSON文件,仅保留完整路径或叶子节点值中任意位置包含指定模式的内容,对应的jq命令如下:

jq --arg pattern "foo" '
def has_match:
  (tostring | test($pattern)) or
  (objects | with_entries(select(.value | has_match)) | length > 0) or
  (arrays | any(.[] | has_match));
.. | objects |= with_entries(select(.key | test($pattern) or .value | has_match))
' input.json

命令说明

  1. --arg pattern "foo":将匹配模式以变量形式传入,后续只需修改引号内的内容即可更换匹配目标,无需改动核心逻辑。
  2. has_match 自定义函数:
    • 先检查当前值转为字符串后是否匹配模式;
    • 若当前值是对象,递归检查其子条目是否存在匹配项,只要有一个符合就返回true;
    • 若当前值是数组,检查数组中是否有元素符合匹配条件。
  3. 递归过滤对象条目:通过..递归遍历所有JSON节点,对每个对象仅保留两种条目:
    • 键名本身匹配模式的条目;
    • 值(或其后代节点)存在匹配内容的条目。

验证效果

将你提供的示例JSON保存为input.json,执行上述命令后,输出结果与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:52:14