В Powershell ConvertTo-JSON отсутствует вложенный уровень
Похоже, что Powershell обрезает данные при экспорте в JSON, если они вложены слишком глубоко. Мой объект Hierchy выглядит так:
Main Object
Metadata
More Metadata
Collection of Other object Sources
Collection of data used by these sources
По какой-то причине, когда я преобразую в JSON, powershell экспортирует третий уровень (сбор данных, используемых этими источниками) в виде пустой строки, даже если это массив объектов с различными объектами NoteProperties, добавленными к ним. Например:
$test = New-Object -TypeName PSObject
$obj = New-Object -TypeName PSObject
$obj | Add-Member -MemberType NoteProperty -Name "Name" -Value "adsf"
$test2 = New-Object -TypeName PSObject
$test2 | Add-Member -MemberType NoteProperty -Name "ArrayTest" -Value @($obj, $obj)
$test3 = New-Object -TypeName PSObject
$test3 | Add-Member -MemberType NoteProperty -Name "ArrayTest" -Value @($obj, $obj, $obj)
$test | Add-Member -MemberType NoteProperty -Name "CollectionTest" -Value @($test2, $test3)
Это приводит к следующей строке JSON:
PS C:\Users\user\projects\Powershell> $test | ConvertTo-Json
{
"CollectionTest": [
{
"ArrayTest": " "
},
{
"ArrayTest": " "
}
]
}
Преобразование в XML приводит к аналогичной ситуации:
<?xml version="1.0"?>
<Objects>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="CollectionTest" Type="System.Object[]">
<Property Type="System.Management.Automation.PSCustomObject">
<Property Type="System.String">@{ArrayTest=System.Object[]}</Property>
<Property Name="ArrayTest" Type="System.Management.Automation.PSNoteProperty">System.Object[]</Property>
</Property>
<Property Type="System.Management.Automation.PSCustomObject">
<Property Type="System.String">@{ArrayTest=System.Object[]}</Property>
<Property Name="ArrayTest" Type="System.Management.Automation.PSNoteProperty">System.Object[]</Property>
</Property>
</Property>
</Object>
</Objects>
Есть ли какое-то ограничение на вложенность объектов в powershell?
1 ответ
Из Get-Help ConvertTo-JSON:
Глубина
Указывает, сколько уровней содержащихся объектов включено в представление JSON. Значением по умолчанию является 2.
Установите параметр -Depth на любую глубину, необходимую для сохранения ваших данных.