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

PowerShell从多JSON对象提取Manufacturer值无输出的问题咨询

PowerShell提取多个JSON对象中Manufacturer值的问题解决

问题根源

你的代码在单个对象测试有效、批量循环失效,核心原因是:批量解析JSON数组后得到的是PSCustomObject集合,而GetEnumerator()方法对PSCustomObject的默认行为和哈希表不同——它不会枚举对象的属性成员,导致Where-Object找不到任何匹配项,自然没有输出。单个测试时你大概率用的是哈希表,所以能正常工作。

两种解决办法

方法1:直接访问属性(最简洁高效)

既然每个JSON对象都包含Manufacturer属性,完全不需要用Where-Object绕弯,直接用点语法访问即可:

foreach($item in $table)
{
   Write-Host $item.Manufacturer
}

方法2:适配PSCustomObject的枚举逻辑

如果需要兼容属性可能不存在的场景,或者一定要用枚举方式,可以先把PSCustomObject转为哈希表,再执行枚举筛选:

foreach($item in $table)
{
   # 将PSCustomObject转为哈希表
   $hashItem = [hashtable]$item
   $result = $hashItem.GetEnumerator() | Where-Object { $_.Key -eq 'Manufacturer'}
   if($result) { Write-Host $result.Value }
}

或者通过Get-Member筛选属性后再访问:

foreach($item in $table)
{
   $targetProp = $item | Get-Member -MemberType NoteProperty | Where-Object Name -eq 'Manufacturer'
   if($targetProp) { Write-Host $item.$($targetProp.Name) }
}

补充说明

当使用ConvertFrom-Json解析JSON数组时,PowerShell会返回PSCustomObject的数组,而非哈希表数组,这是原代码无法批量生效的关键。直接用点语法访问属性是性能最优、代码最简洁的方案,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:35:03