如何将任意PowerShell对象转换为带表头的JSON二维数组
将任意PowerShell对象转换为带表头的JSON二维数组
要把属性数量不固定的PowerShell对象转换成带表头的JSON二维数组,核心是先提取属性名作为表头,再按表头顺序提取每个对象的属性值,最后组合成二维结构再转JSON——直接用ConvertTo-Json只能得到对象数组,无法满足嵌套数组的需求,手动构建二维结构是可行方案:
实现代码
# 假设待转换的对象集合为 $myObj # 1. 获取属性名作为表头(取第一个对象的属性确保所有行顺序一致) $headers = $myObj[0].PSObject.Properties.Name # 2. 构建二维数组:首行是表头,后续每行对应一个对象的属性值 $twoDimensionalArray = @( # 添加表头行 $headers # 遍历每个对象,按表头顺序提取属性值 foreach ($item in $myObj) { $headers.ForEach({ $item.$_ }) } ) # 3. 转换为JSON,-Depth参数按需调整(默认深度为2,嵌套结构多时需增大) $twoDimensionalArray | ConvertTo-Json -Depth 10
代码说明
- 表头提取:通过
PSObject.Properties.Name获取对象的所有属性名,能保证属性顺序和PowerShell默认输出的顺序完全一致。 - 值数组构建:用
$headers.ForEach({ $item.$_ })按表头顺序逐个提取每个对象的属性值,确保每行元素和表头一一对应,即使对象属性数量变化也能自动适配。 - JSON转换:
ConvertTo-Json会自动识别值的类型(比如数字保持数字类型,字符串保留引号),示例中的额外空格仅为可读性优化,实际输出符合标准JSON格式。
示例验证
用你提供的$myObj[0..3]作为输入,运行上述代码后会输出符合预期的JSON二维数组:
[ ["Date_Time", "Total_Time", "Sub_Time_1", "Sub_Time_2"], ["28/11/2024 00:02:14", 67383, 14147, 12986], ["28/11/2024 00:03:19", 64223, 3741, 11610], ["28/11/2024 00:04:15", 55636, 3577, 12246], ["28/11/2024 00:04:53", 37166, 2395, 6871] ]
内容的提问来源于stack exchange,提问作者Samuel Pizarro
相关产品推荐
相关产品推荐

