"Недопустимый массив прошел" при разборе JSON

У меня есть этот файл, который я хочу прочитать в 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;

Ответ 1

Попробуйте ConvertFrom-Json к Out-String до того, как конвейер ConvertFrom-Json в ConvertFrom-Json:

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

В вашем рабочем примере код JSON является строкой, а нерабочий пример возвращает набор строк. Piping to Out-String преобразует коллекцию в одну строку, что и принимает параметр InputObject.

Ответ 3

другой ответ, который также работает: используйте GC -raw <FILE> который будет GC -raw <FILE> как строка