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

为什么PowerShell管道对ConvertFrom-Json转换的对象不生效?

核心原因
  • PowerShell 5.1 中 ConvertFrom-Json 解析JSON得到的数组会作为单个整体对象输出到管道,不会自动拆分数组元素逐个传递。
  • 第一种写法中,Where-Object 接收到的输入是包含3个元素的完整数组对象,而非逐个传入的水果对象。此时执行$_.Name -eq 'banana'判断时,PowerShell的成员枚举特性会读取数组内所有元素的Name属性,返回的banana字符串属于非空真值,因此Where-Object会将整个数组对象直接返回,最终展开呈现为3个全部对象,不符合筛选预期。
括号写法的生效逻辑

用括号包裹命令时,PowerShell会优先完成括号内的所有执行逻辑,拿到完整的数组结果后,会自动枚举数组内的所有元素,逐个传递给下游的Where-Object。此时每个水果对象单独进入筛选逻辑,Name属性判断可以正常生效,最终仅返回匹配的banana对象。

兼容方案补充

除了加括号的写法,你也可以通过手动枚举的方式实现相同效果:

$data | ConvertFrom-Json | ForEach-Object { $_ } | Where-Object { $_.Name -eq 'banana' }

注:该行为仅存在于PowerShell 5.1及更早版本,PowerShell 7+版本中ConvertFrom-Json默认会自动枚举数组元素,两种写法的执行结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:36:03