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 когда возможно.

ConvertTo-JSON-ан-массив-с-одной-п

Другие вопросы по тегам