ConvertTo-Json выравнивает массивы более чем на 3 уровня
В powershell следующее дает правильные результаты.
$foo = @{}
$foo.bar = @{}
$foo.bar.buzz = @("herp","derp")
ConvertTo-Json $foo
{
"bar": {
"buzz": [
"herp",
"derp"
]
}
}
Однако, если я добавлю еще один уровень, то массив "buzz" будет сведен в строку
$foo = @{}
$foo.bar = @{}
$foo.bar.buzz = @{}
$foo.bar.buzz.bazz = @("herp","derp")
ConvertTo-Json $foo
{
"bar": {
"buzz": {
"bazz": "herp derp"
}
}
}
Почему powershell объединяет массивы в строки? Эта проблема похожа на следующие вопросы SO, но ни одно из намеченных решений ее не решает.
почему-делает-PowerShell-тихо-новообращенный-а-строка-массив-с одного пункта к струне
какие-определяет, является ли-на-PowerShell-конвейерный-волевой раскатывать-а-коллекции
1 ответ
Из документации ConvertTo-Json
-глубина
Указывает, сколько уровней содержащихся объектов включено в представление JSON. Значением по умолчанию является 2.
Добавление -Depth 9
возможность ConvertTo-Json
решает проблему
ConvertTo-Json -Depth 9 $foo
Кроме того, есть разница между ConvertTo-Json $foo
а также $foo | ConvertTo-Json
, использование ConvertTo-Json $foo
когда возможно.