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

如何用jq删除JSON中值不包含指定字符串的元素?

如何用jq删除JSON中值不包含"val"的元素?

原始JSON内容

json1.json的内容如下:

{
    "a":"val1",
    "b":"val2",
    "nest1": {
        "z": "x",
        "test": "containval"
    }
}

需求

生成新的JSON,删除所有值不包含"val"的元素(支持任意嵌套层级的属性)。

之前的尝试及问题

你之前使用的命令:

jq 'del(.. | select(. == "val1"))' .\json1.json

输出结果:

{
  "b": "val2",
  "nest1": {
    "z": "x",
    "test": "containval"
  }
}

这个命令仅会删除值等于"val1"的元素,无法满足“删除值不包含val”的需求。

正确的jq命令

可以使用walk函数递归处理所有层级的对象,筛选出符合条件的键值对:

jq 'walk(if type == "object" then with_entries(select(.value | test("val"))) else . end)' json1.json

命令解释

  • walk(...):递归遍历JSON结构中的每一个元素
  • if type == "object" then ... else . end:只对对象类型的元素进行处理,非对象元素保持原样
  • with_entries(select(.value | test("val"))):对对象的每个键值对进行筛选,只保留值中包含"val"子串的条目(test("val")用于字符串的包含匹配)

执行结果

运行上述命令后,会得到期望的输出:

{
    "a":"val1",
    "b":"val2",
    "nest1": {
        "test": "containval"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:05:00