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

如何在PowerShell中遍历JSON数组及转PSCustomObject后的JSON数组?

嘿,针对你提出的两个PowerShell遍历JSON数组的问题,我来给你详细解答:

1. 如何在PowerShell中遍历JSON数组?

其实流程很清晰,先把JSON字符串转换成PowerShell能处理的对象,接着直接用foreach循环遍历就行。给你举个实际可运行的例子:

# 定义一个JSON数组字符串
$jsonStr = @"
[
    {"Name": "Alice", "Age": 30},
    {"Name": "Bob", "Age": 25},
    {"Name": "Charlie", "Age": 35}
]
"@

# 将JSON转换为PowerShell对象数组
$jsonArray = ConvertFrom-Json $jsonStr

# 遍历数组中的每个元素,输出属性
foreach ($item in $jsonArray) {
    Write-Host "姓名: $($item.Name), 年龄: $($item.Age)"
}

运行这段代码,就能逐个输出数组里每个对象的具体属性了。

2. 遍历ConvertFrom-JSON转换的PSCustomObject数组时foreach无效,仅返回枚举器的问题

你碰到的这个问题,大概率是PowerShell的自动类型推断在搞鬼——有时候ConvertFrom-Json返回的对象看起来是数组,但实际是单个PSCustomObject(比如JSON数组结构特殊,或者不同PowerShell版本的处理差异),或者返回的是实现了IEnumerable的集合,直接遍历会返回枚举器而非数组元素。

解决方法很简单,用@()运算符把转换后的结果强制转换成PowerShell数组,就能正常用foreach遍历了:

# 示例JSON数组
$jsonStr = @"
[
    {"Name": "Alice", "Age": 30},
    {"Name": "Bob", "Age": 25},
    {"Name": "Charlie", "Age": 35}
]
"@

# 强制转换为数组,规避类型问题
$jsonArray = @(ConvertFrom-Json $jsonStr)

# 现在遍历就完全正常了
foreach ($item in $jsonArray) {
    Write-Host "姓名: $($item.Name), 年龄: $($item.Age)"
}

另外,你可以用$jsonArray.GetType()查看对象类型,如果显示是System.Management.Automation.PSCustomObject而非数组类型,那强制转数组就是最直接的解决方案。

还有一种可能是你不小心调用了GetEnumerator()方法,比如错误写法:

# 错误示例:遍历了枚举器而非数组元素
foreach ($item in $jsonArray.GetEnumerator()) {
    # 这里只会返回枚举器的属性,不是你要的数组内容
}

只要去掉GetEnumerator(),直接遍历$jsonArray就可以解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:24:12