如果嵌套太深,看起来Powershell在导出为JSON时会切断数据。我的对象层次结构如下所示:
Main Object Metadata More Metadata Collection of Other object Sources Collection of data used by these sources
由于某种原因,当我转换为JSON时,powershell会将第三级(这些源使用的数据的集合)导出为空字符串,即使它是添加了各种NoteProperty的对象数组。例如:
$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中是否存在某种对象嵌套限制?
从Get-Help ConvertTo-JSON:
-Depth 指定JSON表示形式中包含多少级所包含的对象。预设值为2。
设置-Depth参数可以保留数据的深度。