如何让ConvertTo-JSON将空/Null数组转为[]而非[""]?
解决PowerShell ConvertTo-JSON把空/Null数组转成[""]的问题
问题根源
把$null强转成[array]时,PowerShell会生成一个包含单个$null元素的数组(即@($null))。而ConvertTo-Json默认会将数组内的$null序列化为空字符串,最终输出成[""],而非期望的空数组[]。
解决办法
直接用空数组字面量@()初始化变量,替代[array]$null;如果变量是动态获取的、可能为$null,则通过判断转为空数组。
调整后的代码示例
$version = $null $profile = $null $versions = $null $versionsAsArray = $null # 直接初始化为空数组 $offices = @() $roles = @() $versions = [ordered]@{ "version" = $active_version; "default_office" = $line.'Default Office'.TrimEnd("`n"); "offices" = $offices; "roles" = $roles; } [array]$versionsAsArray += $versions [array]$docArray += $versionsAsArray $docArray | ConvertTo-Json -Depth 4 | Out-File -FilePath $env:USERPROFILE\desktop\abc.json -Force
动态场景适配(数组可能有值也可能为空)
如果$offices/$roles是动态获取的、存在为$null的情况,可以这样处理:
# PowerShell 7及以上版本用空合并运算符 $offices = $dynamicValue ?? @() # 兼容旧版本的写法 $offices = if ($dynamicValue -eq $null) { @() } else { [array]$dynamicValue }
调整后预期输出
"offices": [], "roles": []
内容的提问来源于stack exchange,提问作者AnthonyC
相关产品推荐
相关产品推荐

