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

使用PowerShell更新JSON文件失败,请求排查代码问题

解决PowerShell修改JSON文件内容未生效的问题

你的代码核心问题是没有实际修改JSON对象的内部属性,只是在管道里做了零散的字符串替换,而且语法上也存在一些错误,导致最终输出的还是原JSON内容。我来一步步帮你修正:

原代码的问题拆解

  1. 管道语法错误:ConvertFrom-Json $JsonData这部分写法无效,正确的逻辑应该是把读取到的JSON字符串直接转换成PowerShell对象并赋值给$JsonData。
  2. 未更新原JSON对象:你在管道里用%做的字符串替换,只是输出了替换后的零散字符串,并没有把修改后的值写回$JsonData的对应属性里,最后又输出了原$JsonData,导致新文件里既有乱码的替换结果,又有原JSON内容。
  3. 无效替换操作:代码里的-replace ("qa/js/act.2.js", "qa/js/act.2.js")完全没有实际作用,等于替换成自己,应该是替换act.js为act.2.js。

修正后的完整代码

# 读取JSON文件并转换为可操作的PowerShell对象
$JsonData = Get-Content $JsonFilePath -Raw | ConvertFrom-Json

# 精准定位到name为"qact"的模块
$targetModule = $JsonData.modules | Where-Object { $_.name -eq "qact" }

# 修改指定的文件路径
# 替换数组第一个元素:act.css → act.2.css
$targetModule.load.local[0] = $targetModule.load.local[0] -replace "act.css", "act.2.css"
# 替换数组最后一个元素:act.js → act.2.js(用[-1]不用关心数组长度)
$targetModule.load.local[-1] = $targetModule.load.local[-1] -replace "act.js", "act.2.js"

# 将修改后的对象转回JSON格式,保存到目标路径
$JsonData | ConvertTo-Json -Depth 4 | Set-Content $updatedJsonFilePath

代码逻辑说明

  • 先把JSON字符串转换成PowerShell对象,这样可以直接操作对象的属性,比单纯字符串替换更可靠。
  • 通过Where-Object定位到目标模块后,直接修改它的load.local数组元素,确保修改的是原对象的内容。
  • 最后用ConvertTo-Json把修改后的对象转回JSON字符串,用Set-Content写入新文件,就能得到你预期的结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:01