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

如何删除JSON文件中包含指定字符串的整个节点?

问题:删除JSON中指定id的整个节点

原始JSON内容

{ 
   "JSONS" : [ 
      { 
         "id" : "ToRemove", 
         "First" : [ 
            { 
               "id" : "geo", 
               "Name" : "Person1", 
               "model" : [ 
               ], 
               "adjustments" : [ 
                  { 
                     "uid" : "3", 
                     "name" : "4s", 
                     "value" : "1"
                  }, 
                  { 
                     "uid" : "5", 
                     "name" : "3s", 
                     "value" : "6"
                  }
               ]
            }, 
            { 
               "id" : "Meters", 
               "Dictionary" : "4.2"
            }, 
            { 
               "id" : "Moon", 
               "Filter" : "0.5", 
               "Saturn" : { 
                  "s" : "0", 
                  "v" : "1"
               }
            }
         ]
      }
   ]
}

需求说明

需要删除所有id属性包含指定字符串(如示例中的"ToRemove")的整个节点,同时支持通过数组指定多个需要匹配删除的字符串,处理后保持JSON格式正确。

尝试的错误代码

$ToRemove = Get-Content $SourceFile  | ConvertFrom-Json
$ToRemove.PSObject.Object.Remove('id:','ToRemove')
$ToRemove | ConvertTo-Json -Depth 100 | Out-File $DestFile

该代码无法正常工作,因为PSObject.Object.Remove仅用于删除对象的单个属性,而非数组中的整个节点。


解决方案

正确的PowerShell代码

# 定义需要匹配删除的id字符串数组,可添加多个目标字符串
$removeIds = @("ToRemove", "AnotherTargetId")

# 读取源JSON文件(-Raw参数确保读取完整的JSON内容)
$jsonContent = Get-Content $SourceFile -Raw | ConvertFrom-Json

# 过滤JSONS数组,保留id不包含指定字符串的节点
$jsonContent.JSONS = $jsonContent.JSONS | Where-Object {
    $currentId = $_.id
    $keepNode = $true
    # 遍历所有需要删除的字符串,检查当前节点id是否包含目标字符串
    foreach ($removeStr in $removeIds) {
        if ($currentId -like "*$removeStr*") {
            $keepNode = $false
            break
        }
    }
    $keepNode
}

# 将处理后的对象转换回JSON并保存(-Depth 100避免嵌套层级截断,-Encoding UTF8保证编码正确)
$jsonContent | ConvertTo-Json -Depth 100 | Out-File $DestFile -Encoding UTF8

代码说明

  1. 定义删除列表:$removeIds数组可添加任意多个需要匹配的字符串,只要节点的id包含其中任意一个,就会被删除。
  2. 读取JSON:使用-Raw参数读取文件,避免因换行导致JSON转换失败。
  3. 过滤节点:通过Where-Object遍历JSONS数组,对每个节点的id进行包含匹配,仅保留不需要删除的节点。
  4. 保存结果:转换回JSON时指定-Depth 100,防止深层嵌套的JSON结构被截断;-Encoding UTF8确保输出文件编码正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:15:38