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

如何在PowerShell中遍历多维JSON对象?已尝试Foreach等方法未果

遍历PowerShell中多维嵌套JSON数组的方法

当你用ConvertFrom-Json转换嵌套JSON数组后,得到的是多层嵌套的PowerShell数组对象,直接遍历最外层只会拿到子数组,无法直接获取具体值。下面针对你的两组数据,分别给出固定深度遍历和通用递归遍历的方案:


一、处理固定三层嵌套的第一组数据

第一组JSON是三层嵌套数组(外层数组 → 第二层数组 → 第三层数组 → 具体值),可以通过逐层嵌套foreach或Foreach-Object遍历:

示例代码

# 定义第一组JSON数据
$jsonData1 = @"
[
    [
        [
            "test-1234",
            "2023-07-11T04:00:24+00:00"
        ]
    ],
    [
        [
            "sb-00091",
            "2023-07-11T04:00:21+00:00"
        ]
    ]
]
"@

# 转换为PowerShell对象
$psObj1 = $jsonData1 | ConvertFrom-Json

# 逐层遍历提取所有值
foreach ($level1 in $psObj1) {
    foreach ($level2 in $level1) {
        foreach ($value in $level2) {
            # 输出或处理每个具体值
            Write-Host "提取到值:$value"
        }
    }
}

输出结果

提取到值:test-1234
提取到值:2023-07-11T04:00:24+00:00
提取到值:sb-00091
提取到值:2023-07-11T04:00:21+00:00

二、处理深度不固定的第二组数据

第二组JSON包含四层嵌套(比第一组多了一层子数组),固定层数的遍历会失效,推荐用递归函数处理任意深度的嵌套数组:

示例代码

# 定义第二组JSON数据
$jsonData2 = @"
[
    [
        [
            "test-999",
            "2023-07-13T04:00:21+00:00",
            [
                [
                    "checking"
                ]
            ]
        ]
    ]
]
"@

# 转换为PowerShell对象
$psObj2 = $jsonData2 | ConvertFrom-Json

# 递归遍历函数:自动处理任意深度的嵌套数组
function Get-AllNestedValues {
    param(
        [Parameter(Mandatory)]
        $InputObject
    )

    foreach ($element in $InputObject) {
        # 判断当前元素是否为数组(PowerShell数组或JSON转换后的数组对象)
        if ($element -is [array] -or ($element.PSObject.Properties.Name -contains 'Count')) {
            # 递归处理子数组
            Get-AllNestedValues -InputObject $element
        } else {
            # 输出非数组的具体值
            Write-Host "提取到值:$element"
        }
    }
}

# 调用函数遍历第一组数据
Write-Host "`n=== 第一组数据提取结果 ==="
Get-AllNestedValues -InputObject $psObj1

# 调用函数遍历第二组数据
Write-Host "`n=== 第二组数据提取结果 ==="
Get-AllNestedValues -InputObject $psObj2

输出结果

=== 第一组数据提取结果 ===
提取到值:test-1234
提取到值:2023-07-11T04:00:24+00:00
提取到值:sb-00091
提取到值:2023-07-11T04:00:21+00:00

=== 第二组数据提取结果 ===
提取到值:test-999
提取到值:2023-07-13T04:00:21+00:00
提取到值:checking

关键说明

  • ConvertFrom-Json会将JSON数组转换为PowerShell的System.Object[]数组,直接遍历最外层只能拿到子数组,必须逐层深入或递归。
  • 递归函数的核心逻辑是:判断当前元素是否为数组,若是则继续递归,否则输出具体值,适用于所有嵌套深度的JSON数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:36