ConvertTo-Json忽略内部对象中的数组

8iwquhpp  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个需要扩展的对象。问题是在转换为JSON之后,内部数组对象始终为空。我不知道我的失败在哪里:)

$settings = @{}

# create the nested object
$settings | Add-Member -Type NoteProperty -Name nested_obj -Value @{}

# extend the nested object with an array property
$settings.nested_obj | Add-Member -Type NoteProperty -Name nested_property -Value @( "1", "2" )

# {"nested_property":["1","2"]}
Write-Host ( $settings.nested_obj | ConvertTo-Json -Compress -Depth 100 )

# {"nested_obj":{}} - the nested object is unexpectedly empty
Write-Host ( $settings | ConvertTo-Json -Compress -Depth 100 )

谢谢

cbjzeqam

cbjzeqam1#

ConvertTo-Json看到存储在$settings中的对象是一个 hashtable,所以它不是序列化属性,而是开始序列化字典条目-你没有。
nested_objnested_property值附加为字典条目:

# create root hashtable/dictionary
$settings = @{}

# create the nested hashtable
$settings['nested_obj'] = @{}

# add an entry to the nested hashtable
$settings['nested_obj']['nested_property'] = @( "1", "2" )

# {"nested_obj":{"nested_property":["1","2"]}}
Write-Host ( $settings | ConvertTo-Json -Compress -Depth 100 )

...或者,使用实际(非字典)对象

# create object hierarchy
$settings = [PSCustomObject]@{
  nested_obj = [PSCustomObject]@{
    nested_property = @( "1", "2" )
  }
}

# {"nested_obj":{"nested_property":["1","2"]}}
Write-Host ( $settings | ConvertTo-Json -Compress -Depth 100 )

PowerShell 2.0等效版本,使用Add-Member,将与您最初的尝试非常相似,不同之处在于我们将@{}替换为New-Object psobject

$settings = New-Object psobject
$settings | Add-Member -Type NoteProperty -Name nested_obj -Value (New-Object psobject)
$settings.nested_obj | Add-Member -Type NoteProperty -Name nested_property -Value @( "1", "2" )

# {"nested_obj":{"nested_property":["1","2"]}}
Write-Host ( $settings | ConvertTo-Json -Compress -Depth 100 )

相关问题