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

如何用PowerShell修改JSON非字符串值?解决布尔值转字符串问题

解决PowerShell修改JSON时布尔值被序列化为字符串的问题

问题场景

现有appsettings.json配置文件内容如下:

{"ApiSettings": {"EnableSwagger": true,"UrlListeners": ["http://localhost:9000"],"DebugMode": true}}

编写PowerShell脚本时,尝试将DebugMode设为false,但生成的JSON中该值变成带引号的字符串"false",而非预期的布尔值false,同时需要修改UrlListeners部分。

解决方案

核心要点是使用PowerShell原生的布尔类型值(而非字符串),并正确处理JSON的序列化/反序列化流程:

完整脚本示例

# 1. 读取JSON文件并转换为PowerShell对象
$configPath = ".\appsettings.json"
$config = Get-Content -Path $configPath -Raw | ConvertFrom-Json

# 2. 修改UrlListeners(示例:替换为新的监听地址数组)
$config.ApiSettings.UrlListeners = @("http://localhost:8080", "https://api.example.com")

# 3. 修改DebugMode为布尔值false(注意不要加引号)
$config.ApiSettings.DebugMode = $false

# 4. 将修改后的对象转换回JSON并写入文件
# -Depth参数确保嵌套结构完整序列化,避免默认深度不足导致的截断
$config | ConvertTo-Json -Depth 10 | Set-Content -Path $configPath -Encoding UTF8

关键说明

  • 避免使用字符串赋值:如果写成$config.ApiSettings.DebugMode = "false",ConvertTo-Json会将其识别为字符串类型,最终生成带引号的"false";而使用PowerShell原生的$false(布尔值),序列化后会得到JSON标准的布尔值false。
  • -Depth参数:默认ConvertTo-Json的深度为2,若配置文件嵌套层级较深,需指定足够大的深度值(如10),防止嵌套对象被截断为{}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:15:43