"Недопустимый массив прошел" при разборе 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.
Ответ 2
В качестве альтернативы вы можете использовать Get-Content -Raw
который будет извлекать JSON в виде одной строки.
См. Это сообщение для получения дополнительной информации: http://blogs.technet.com/b/heyscriptingguy/archive/2014/04/23/json-is-the-new-xml.aspx
Ответ 3
другой ответ, который также работает: используйте GC -raw <FILE>
который будет GC -raw <FILE>
как строка