PowerShell修改JSON配置:首次运行未生成子属性问题解析
PowerShell脚本生成空ParentObj的原因解析
PowerShell处理JSON解析后的PSCustomObject时,不会自动隐式创建嵌套的对象层级,这就是导致你遇到问题的核心原因。
具体过程拆解
当你的settings.json是空对象{}时:
- 通过
ConvertFrom-Json解析后,得到的$settings是一个空的PSCustomObject - 脚本里
-not $settings.ParentObj判断成立(因为ParentObj属性不存在,逻辑上视为$false),所以进入section 1分支 - 但直接执行
$settings.ParentObj.ChildProp = "xxx"时,由于$settings.ParentObj本身是$null,PowerShell不会自动为你创建这个嵌套对象,赋值操作相当于对空值操作,完全不会生效 - 最终
$settings中的ParentObj依然是$null,转成JSON后就显示为空对象"ParentObj": {}
修正示例
要让嵌套属性生效,必须先显式创建ParentObj对象,再给子属性赋值:
$settingsPath = ".\settings.json" $settings = Get-Content $settingsPath | ConvertFrom-Json if (-not $settings.ParentObj) { Write-Host "section 1" # 先创建ParentObj为PSCustomObject并直接赋值子属性 $settings.ParentObj = [PSCustomObject]@{ ChildProp = "your-value-here" } } $settings | ConvertTo-Json -Depth 10 | Set-Content $settingsPath
内容的提问来源于stack exchange,提问作者No Name
相关产品推荐
相关产品推荐

