PowerShell 5中将哈希表数组转换为JSON出现非预期结果如何处理
问题原因&解决方法
你踩了3个典型的PowerShell 5序列化坑,调整代码如下即可得到预期的单层数组JSON:
步骤1:修正数组构造逻辑
删掉多余的嵌套花括号和不必要的逗号前缀,直接用@()包裹生成数组即可:
$body = @($someArray | ForEach-Object { @{ name = $_ } })
步骤2:正确调用ConvertTo-Json
PowerShell 5的管道会默认展开数组,直接把数组传入管道会被识别为单个对象,序列化为带Count/value的结构。避免这个问题有两种常用写法:
写法1:把数组作为InputObject参数传入(推荐)
ConvertTo-Json -InputObject $body -Depth 3
写法2:管道传输时禁用数组展开
Write-Output $body -NoEnumerate | ConvertTo-Json -Depth 3
两种写法输出的结果都是你需要的单层数组:
[ { "name": "test" }, { "name": "test-2" } ]
就算$someArray只有1个元素,输出也会保留数组格式,不会转成单个哈希表结构。
内容的提问来源于stack exchange,提问作者unitrium
相关产品推荐
相关产品推荐

