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

如何使用jq删除键包含指定子串的JSON元素?

筛选JSON数组中键不含指定字符串的元素

问题描述

我有如下JSON数据:

{
  "Category": [
    {
      "SomeKey_1": {
        "Property1": 1,
        "Property2": false
      }
    },
    {
      "SomeKey_2": {
        "Property1": 2,
        "Property2": true
      }
    },
    {
      "OtherKey_1": {
        "Property1": 3,
        "Property2": false
      }
    },
    {
      "OtherKey_2": {
        "Property1": 4,
        "Property2": false
      }
    }
  ]
}

需要从Category数组中删除所有键包含"Other"的元素,最终得到仅保留SomeKey开头元素的JSON结果。尝试过Select命令,但它只能基于值筛选,无法处理键的判断。


解决方案

方案1:PowerShell实现

利用PowerShell的对象操作能力,通过Where-Object过滤元素,检查对象的键名是否符合要求:

# 假设原始JSON字符串存储在$jsonStr变量中(也可通过Get-Content从文件读取)
$jsonObj = $jsonStr | ConvertFrom-Json

# 筛选Category数组,保留键不含"Other"的元素
$jsonObj.Category = $jsonObj.Category | Where-Object {
    -not ($_.PSObject.Properties.Name -match 'Other')
}

# 转换回JSON格式输出,-Depth确保嵌套层级完整
$jsonObj | ConvertTo-Json -Depth 3

关键说明:

  • $_.PSObject.Properties.Name获取当前数组元素的所有键名
  • -match 'Other'检测键名是否包含目标字符串,-not取反后保留符合条件的元素
  • -Depth 3避免JSON转换时截断嵌套结构

方案2:jq命令行工具实现

如果使用命令行环境,jq是更轻量的JSON处理工具,一行命令即可完成筛选:

jq '.Category |= map(select(keys[] | test("Other") | not))' input.json

关键说明:

  • .Category |= ...直接修改Category数组
  • map(select(...))遍历数组并筛选元素
  • keys[] | test("Other") | not检查元素的所有键是否都不包含"Other"

内容的提问来源于stack exchange,提问作者Tamás Varga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:55:20