17

我有这个文件,我想用 PowerShell 读取:

var myMap =
[
  {
    "name": "JSON Example",
    "attr": "Another attribute"
  }
]

我的 PowerShell v3 代码:

$str = Get-Content $file | Select -Skip 1;
$str | ConvertFrom-Json;

但我总是收到这个错误:

ConvertFrom-Json : Invalid array passed in, ']' expected. (1): [
At S:\ome\Path\script.ps1:60 char:8
+ $str | ConvertFrom-Json;
+        ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

如果我将 JSON 代码手动复制并粘贴到代码中,一切正常:

'[
  {
    "name": "JSON Example",
    "attr": "Another attribute"
  }
]' | ConvertFrom-Json;
4

5 回答 5

34

Out-String在管道到之前尝试管道到ConvertFrom-Json

Get-Content $file | Select -Skip 1 | Out-String | ConvertFrom-Json

在您的工作示例中,JSON 代码是一个字符串,而非工作示例返回一组行。管道Out-String将集合转换为单个字符串,这是 InputObject 参数接受的。

于 2012-08-27T10:55:42.720 回答
10

或者,您可以使用Get-Content -Raw它将 JSON 作为单个字符串检索。

有关更多信息,请参阅此帖子:http: //blogs.technet.com/b/heyscriptingguy/archive/2014/04/23/json-is-the-new-xml.aspx

于 2015-07-06T12:43:30.597 回答
0

var myMap =不是json,它是javascript 。删除第一行就可以了。

编辑:

哦,你跳过了第一行。可能是文件最后一行少了回车,Powershell 3对它比较敏感。即使最后没有回车,它在 Powershell 5.1 中也能正常工作。

于 2020-01-08T19:03:03.573 回答
-1

另一个也有效的答案: use GC -raw <FILE>which will pass in as string

于 2016-07-13T14:32:22.943 回答
-1

我的 JSON 文件看起来像这样(test.json):

{

    "Environments":
      [ 
        "Env1":
            {
                "websiteName"  : "",
                "websiteUrl"   : ""
            },

        "Env2":
            {
                "websiteName"  : "",
                "websiteUrl"   : ""
            }
      ]
}

当我使用这个命令时,我得到了 Invalid array passed 错误:Get-Content test.json | ConvertFrom-Json

正如许多评论指出的那样,我尝试使用 Out-String 和 -Raw,但没有运气。所以我修改了文件如下(删除了“环境”部分),它现在工作正常(Get-Content test.json | ConvertFrom-Json):

{

        "Env1":
            {
                "websiteName"  : "",
                "websiteUrl"   : ""
            },

        "Env2":
            {
                "websiteName"  : "",
                "websiteUrl"   : ""
            }
}
于 2020-01-08T17:36:08.987 回答