PowerShell中如何将ArrayList数组转换为含指定键的结构化JSON文档
核心问题原因
直接将ArrayList通过管道传给ConvertTo-Json时,序列化的对象就是ArrayList本身,自然只会输出纯数组结构;要生成带fruits自定义顶层键的JSON,需要先将ArrayList绑定到对象的对应属性上,再对整个对象执行序列化操作。
具体实现步骤
- 保留你原本的ArrayList定义:
[System.Collections.ArrayList]$Fruits = "A", "B"
- 构造包含目标属性的自定义PowerShell对象,将ArrayList赋值给对象的
fruits键:
$requestObject = [PSCustomObject]@{ fruits = $Fruits }
- 对构造好的对象执行JSON转换:
$requestObject | ConvertTo-Json
执行上述代码后,即可输出完全符合预期的结构:
{"fruits": ["A", "B"]}
常见避坑提示
PowerShell 5.1版本存在默认的数组折叠逻辑:当数组内元素数量少于3个时,序列化过程会自动把属性内的数组展开为标量值,比如把单元素数组
"A"转成普通字符串,破坏预期的数组结构。
对应解决方式:
- 调用
ConvertTo-Json时添加-Depth 10参数,匹配JSON对象的嵌套层级,避免层级截断- 给对象属性赋值时用数组运算符显式包裹:
fruits = @($Fruits),强制PowerShell保持数组类型不展开
如果不想单独定义中间变量,也可以用简化写法直接构造结构完成转换:
@{ fruits = $Fruits } | ConvertTo-Json -Depth 10
内容的提问来源于stack exchange,提问作者Tom Martens
相关产品推荐
相关产品推荐

