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

PowerShell使用ConvertTo-Json转JSON时如何修改属性名并展开二维数组

你可以通过PowerShell的动态属性添加能力实现需求,无需预定义固定属性的类,对后续维度扩展的适配性也更好:

二维数组场景实现方案

核心逻辑是遍历二维数组的行,动态给输出对象添加flexDataX格式的属性:

# 基于原始flexData对象构建动态输出对象
$outputObj = [PSCustomObject]@{
    dateTime = $flexObj.dateTime
    firmwareVersion = $flexObj.firmwareVersion
}

# 遍历二维数组每一行,自动生成对应属性
for ($i=0; $i -lt $flexObj.flexData.Count; $i++) {
    $outputObj | Add-Member -MemberType NoteProperty -Name "flexData$i" -Value $flexObj.flexData[$i]
}

# 转换为JSON时指定深度,避免嵌套结构截断
$outputObj | ConvertTo-Json -Depth 3

扩展三维数组场景实现方案

如果后续新增存储多组迭代数据的第三维,只需要在外层新增迭代层级的遍历即可,示例如下:

# 模拟三维数据结构:第一维为迭代次数,第二、三维为原有flexData结构
$flexObj.flexData = @(
    @(@(0, 1), @(320, 17), @(45, 36), @(0, 0)), # 第0次迭代数据
    @(@(1, 2), @(310, 19), @(42, 38), @(0, 1)), # 第1次迭代数据
    @(@(2, 3), @(305, 21), @(40, 40), @(1, 1))  # 第2次迭代数据
)

# 构建支持三维的动态输出对象
$outputObj = [PSCustomObject]@{
    dateTime = $flexObj.dateTime
    firmwareVersion = $flexObj.firmwareVersion
}

# 遍历迭代维度
for ($iter=0; $iter -lt $flexObj.flexData.Count; $iter++) {
    $currentIterData = $flexObj.flexData[$iter]
    # 遍历当前迭代下的二维数组行
    for ($row=0; $row -lt $currentIterData.Count; $row++) {
        $propName = "iter${iter}_flexData${row}"
        $outputObj | Add-Member -MemberType NoteProperty -Name $propName -Value $currentIterData[$row]
    }
}

# 输出JSON,深度按需调整
$outputObj | ConvertTo-Json -Depth 4

可复用封装方案

可以把逻辑封装为通用函数,自动适配二维/三维结构:

function Convert-FlexToDynamicObj {
    param(
        [Parameter(Mandatory=$true)]
        [flexData]$InputObject,
        [int]$JsonDepth = 4
    )
    $output = [PSCustomObject]@{
        dateTime = $InputObject.dateTime
        firmwareVersion = $InputObject.firmwareVersion
    }
    # 自动判断数组维度
    if ($InputObject.flexData[0] -is [array] -and $InputObject.flexData[0][0] -is [array]) {
        # 三维数组处理逻辑
        for ($iter=0; $iter -lt $InputObject.flexData.Count; $iter++) {
            for ($row=0; $row -lt $InputObject.flexData[$iter].Count; $row++) {
                $output | Add-Member -NotePropertyName "iter${iter}_flexData${row}" -NotePropertyValue $InputObject.flexData[$iter][$row]
            }
        }
    } else {
        # 二维数组处理逻辑
        for ($row=0; $row -lt $InputObject.flexData.Count; $row++) {
            $output | Add-Member -NotePropertyName "flexData${row}" -NotePropertyValue $InputObject.flexData[$row]
        }
    }
    return $output
}

# 调用示例
Convert-FlexToDynamicObj -InputObject $flexObj | ConvertTo-Json -Depth 4

注意:PowerShell的ConvertTo-Json默认嵌套深度为2,多维结构转换时必须显式指定-Depth参数,否则会出现结构截断。

内容的提问来源于stack exchange,提问作者martorad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:01