You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将任意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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:11:12