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