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

PowerShell如何精准替换JSON中objectStatus键对应值(兼容多空格)

PowerShell批量替换JSON指定键值实现方案

问题背景

  • 目录下存在多层级文件夹,存放大量JSON文件,需要批量修改指定字段内容
  • 目标修改规则:仅将键objectStatus对应的ACTIVE值替换为INACTIVE
  • 兼容要求:键和值之间可能存在任意数量的空格,例如"objectStatus": "ACTIVE",这类格式也需要正常识别
  • 原有脚本问题:全局替换所有"ACTIVE"字符串,会误修改其他键名下的同名值,不符合需求

原有脚本如下:

$jsonFiles = Get-ChildItem . *.json -rec
foreach ($file in $jsonFiles)
{
    (Get-Content $file.PSPath) |
    Foreach-Object {$_ -replace '"ACTIVE"','"INACTIVE"'} |
    Set-Content $file.PSPath
}

调整后脚本

核心修改点是用正则精准匹配目标键值对,通过捕获组保留原有键值之间的空格格式,不会误匹配其他位置的ACTIVE值:

$jsonFiles = Get-ChildItem -Path . -Filter *.json -Recurse
foreach ($file in $jsonFiles)
{
    (Get-Content $file.PSPath -Raw -Encoding UTF8) |
    Foreach-Object {
        # 正则仅匹配objectStatus键后跟随任意空白字符的"ACTIVE"值
        $_ -replace '("objectStatus":\s*)"ACTIVE"', '$1"INACTIVE"'
    } |
    Set-Content $file.PSPath -Encoding UTF8
}

逻辑说明

  • 正则表达式("objectStatus":\s*)"ACTIVE"中,括号内的内容是捕获组,会先匹配固定键名"objectStatus":,再匹配后面任意数量(包含0个)的空白字符(空格、制表符都可识别),只有后续紧跟"ACTIVE"时才会触发替换
  • 替换时用$1引用捕获组拿到的键名+原有空白内容,后面拼接新值"INACTIVE",完全保留原文件的排版格式,不会改动原有空格缩进
  • 加上-Raw参数一次性读取整个文件内容,兼容键值对跨行拆分的极端场景;添加-Encoding UTF8参数避免文件读写出现乱码
  • 其他键下的"ACTIVE"值因为前面没有匹配的objectStatus键,完全不会被替换,解决了全局误替换的问题

注意:运行脚本前建议先备份少量文件测试效果,确认符合预期后再全量执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:21:35