为什么需要将ConvertFrom-Json用圆括号传递到Foreach-Object?

问题描述

我有这个功能来获取json文件的内容。 我有一些(对我而言)意外的行为,试图将其通过管道传递到ConvertTo-JsonForeach-Object

Function GetConfigJson
{
    $ConfigPath = "pathtomyjsonfile.json"
    return Get-Content $ConfigPath | Out-String
}

json的格式类似于[{"key1":"value1"},{"key2":"value2"},...]

要测试行为,我做了以下事情:

$a = 0;
GetConfigJson | ConvertFrom-Json | ForEach-Object { $a++ };
$b = 0;
ConvertFrom-Json GetConfigJson | ForEach-Object { $b++ };
$c = 0;
ConvertFrom-Json (GetConfigJson) | ForEach-Object { $c++ };
$d = 0;
(ConvertFrom-Json (GetConfigJson)) | ForEach-Object { $d++ };

Write-Host "Test1: $a | Test2: $b | Test3: $c | Test4: $d";

仅在这些Test4中打印期望的数字,Test1Test3打印1,而Test2则出错:ConvertFrom-Json : Invalid JSON primitive: GetConfigJson. / p>

为什么我需要在ConvertFrom-Json周围加上括号才能将其作为对象数组进行管道传递?

(更容易接受函数名GetConfigJson的括号-但我仍然想知道为什么在那里需要它?)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)