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

使用PowerShell编辑JSON时的缩进与键序美化问题

解决PowerShell编辑appsettings.json的缩进与键顺序问题

问题根源

  1. 键顺序混乱:你使用的普通哈希表@{}是无序结构,PowerShell会自动调整键的排列顺序,不会保留你手动插入的顺序。
  2. 缩进异常:默认ConvertTo-Json的缩进行为在不同PowerShell版本中存在差异,且Out-File默认编码可能导致文件格式出现错乱。

修复方案

1. 用有序字典锁定键顺序

将所有普通哈希表替换为有序字典[ordered]@{},它会严格保留你添加键的先后顺序。

2. 显式指定缩进与编码

  • 使用ConvertTo-Json的-Indent参数指定缩进空格数(比如-Indent 2),统一JSON文件的缩进格式。
  • 给Out-File添加-Encoding utf8参数,避免编码问题引发的格式异常。

修改后的完整代码

$appSettings = Get-Content C:\test\appsettings.json | ConvertFrom-Json

# 用有序字典保证键的插入顺序
$httpData = [ordered]@{"Url"="http://*:2201"}

$httpsData = [ordered]@{}
$httpsData.Add("Url","https://*:2203")
$httpsData.Add("SslProtocols",$("Tls12", "Tls13"))
$httpsData.Add("Certificate",[ordered]@{"Subject"="SubjectName";"Store"="My";"Location"="CurrentUser";"AllowInvalid"="True";})

$endPointsData = [ordered]@{}
$endPointsData.Add("Http",$httpData)
$endPointsData.Add("HttpsInlineCertStore",$httpsData)

$KestrelData = [ordered]@{}
$KestrelData.Add("EndPoints",$endPointsData)
$appSettings | Add-Member -Name 'Kestrel' -Value $KestrelData -MemberType NoteProperty

# 显式指定缩进和编码,确保格式正确
$appSettings | ConvertTo-Json -Depth 6 -Indent 2 | Out-File "C:\test\appsettings.json" -Encoding utf8

额外说明

  • 如果你使用PowerShell 5.1或更早版本,ConvertTo-Json没有-Indent参数,可以安装第三方模块(比如PSScriptTools的ConvertTo-JsonPretty)来处理格式化,或者直接升级到PowerShell 7+获得原生友好的JSON支持。
  • 若需要将Kestrel属性插入到JSON的特定位置,仅用Add-Member追加无法实现,需要重新构建整个对象结构来调整属性顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:17:08