为什么以下不迭代元素System.object[]
返回的数组ConvertFrom-Json
:
ConvertFrom-Json '[1, 2, 3]' | ForEach-Object {": $_"}
但这确实:
(ConvertFrom-Json '[1, 2, 3]') | ForEach-Object {": $_"}
在我看来,在第一种情况下,整个数组作为参数传递给ForEach
但我不清楚原因。
更新:这似乎是 Powershell 中与数组转换相关的错误,请参阅here https://github.com/PowerShell/PowerShell/issues/3153 and here https://stackoverflow.com/a/38212718/282783.
复制我的答案here https://stackoverflow.com/a/49136853/696808:
ConvertFrom-Json
管道有一些奇怪的行为。问题是ConvertFrom-Json
将 JSON 数组包装在一个数组中,然后传递整个数组作为一项进行下去。这在大多数情况下都很好,但如果最外层是 JSON 数组,则整个数组将作为单个对象传递到管道中。
比较:
PS> ConvertFrom-Json '[1, 2, 3]' | ForEach-Object {": $_"}
: 1 2 3
PS> (ConvertFrom-Json '[1, 2, 3]') | ForEach-Object {": $_"}
: 1
: 2
: 3
PS> $x = ConvertFrom-Json '[1, 2, 3]'
PS> $x | ForEach-Object {": $_"}
: 1
: 2
: 3
PS> ,$x | ForEach-Object {": $_"}
: 1 2 3
请注意,在最后一个示例中,我们可以使用一元逗号运算符重复该问题。
该问题已报告here https://github.com/PowerShell/PowerShell/issues/3424适用于 PowerShell 核心 6。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)