【发布时间】:2021-10-30 15:52:45
【问题描述】:
考虑以下代码:
$data = '[
{
"Name": "banana",
"Color": "yellow"
},
{
"Name": "kiwi",
"Color": "green"
},
{
"Name": "apple",
"Color": "red"
}
]'
# Returns 3 objects while only 1 was expected
$data | ConvertFrom-Json | Where-Object { $_.Name -eq 'banana' }
# Workaround, returns 1 object as expected:
($data | ConvertFrom-Json) | Where-Object { $_.Name -eq 'banana' }
为什么不能使用第一个选项?从 json 转换对象后,Where-Object 函数似乎不正确。这发生在 PowerShell 版本 5.1 上。
我们是否遗漏了一些明显的东西?
【问题讨论】:
-
似乎某些 cmdlet 必须在使用前强制进行评估。
Get-Date是另一个这样的难题。 -
这也产生了一个有趣的结果。
$data | ConvertFrom-Json | Where-Object Name -eq 'banana' -
从 PowerShell v6 开始,
convertfrom-json不像其他 cmdlet 那样在传递到管道之前枚举 JSON 数组,而是沿着管道发送单个对象。使用(),您正在强制枚举。这已在 PowerShell v7 中修复