如何使用PowerShell替换带注释JSON文件中的值并保留注释保存
解决PowerShell修改带注释JSON保留注释的问题
现有代码问题梳理
- 标准
ConvertFrom-Json命令默认会忽略所有注释,将内容转换为PS对象后注释信息会完全丢失,后续操作无法恢复 - 你代码中额外添加的正则主动清除了
//和/* */格式的注释,相当于主动丢弃了需要保留的内容,自然无法实现需求
推荐解决方案
直接使用精准正则匹配替换的方案,不需要解析JSON结构,仅修改指定字段的值,原有所有注释、缩进、换行格式都会完整保留,代码示例如下:
# 定义JSON文件路径 $jsonfile = "你的config.json实际路径" # 读取文件原始内容,不要做JSON转换 $rawContent = Get-Content -Path $jsonfile -Raw # 精准匹配FramewokSettings节点下的Version字段,替换值为10,保留该行后续的注释 $updatedContent = $rawContent -replace '(?<="FramewokSettings"\s*:\s*{[\s\S]*?"Version"\s*:\s*)"[^"]+"', '"10"' # 将修改后的内容写回文件,-NoNewline参数避免额外添加换行破坏原有格式 $updatedContent | Set-Content -Path $jsonfile -NoNewline -Encoding UTF8
注意事项
- 如果JSON中存在多个名为
Version的字段,上述示例中的正则已经通过上下文匹配限定了仅修改FramewokSettings节点下的字段,不会出现误改 - 如果你的
Version值为不带引号的数字类型,可将正则规则调整为(?<="FramewokSettings"\s*:\s*{[\s\S]*?"Version"\s*:\s*)\d+,替换值直接写10即可 - 不要将带注释的JSON通过
ConvertFrom-Json转对象后再用ConvertTo-Json序列化,原生JSON规范本身不支持注释,序列化后注释必然丢失
内容的提问来源于stack exchange,提问作者kat
相关产品推荐
相关产品推荐

