"Недопустимый массив передан" при разборе 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:omePathscript.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;

3 ответов


попробуйте трубу Out-String до трубопроводов ConvertFrom-Json:

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

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


в качестве альтернативы вы можете использовать Get-Content -Raw который будет извлекать JSON как одну строку.

см. этот пост для получения дополнительной информации: http://blogs.technet.com/b/heyscriptingguy/archive/2014/04/23/json-is-the-new-xml.aspx


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