PowerShell - ConvertFrom-Json 无法正确序列化具有混合属性的 JSON 项目数组 [重复]
Posted
技术标签:
【中文标题】PowerShell - ConvertFrom-Json 无法正确序列化具有混合属性的 JSON 项目数组 [重复]【英文标题】:PowerShell - ConvertFrom-Json fails to properly serialize JSON array of items with mixed properties [duplicate] 【发布时间】:2022-01-19 02:38:30 【问题描述】:我正在为 NoSQL 支持的数据库开发 PowerShell 客户端。并非我查询的表中的所有文档都具有完全相同的属性集。当使用 ConvertFrom-Json
序列化此负载时,第一个 JSON 数组项指示 JSON 负载中所有其他对象可用的属性。
例子:
@"
[
"thing1": "bob",
"thing2": "mary"
,
"thing1": "bob",
"thing2": "mary",
"thing3": "tom"
]
"@ | ConvertFrom-Json
thing1 thing2
------ ------
bob mary
bob mary
@"
[
"thing1": "bob",
"thing2": "mary",
"thing3": "tom"
,
"thing1": "bob",
"thing2": "mary"
]
"@ | ConvertFrom-Json
thing1 thing2 thing3
------ ------ ------
bob mary tom
bob mary
这是预期的行为吗?除了尝试自己解析原始 JSON 之外,还有其他方法吗?
我目前使用的是 PowerShell 5.1:
$PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.1801
PSEdition Desktop
PSCompatibleVersions 1.0, 2.0, 3.0, 4.0...
BuildVersion 10.0.18362.1801
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
【问题讨论】:
如果您想知道的话,元素 1(索引从 0 开始)的属性thing3
将在那里。即使您没有在控制台上看到它。
你可以尝试先存储对象再$json.foreach( $_ | Out-Host )
您说的很对 Santiago,感谢您的快速回复。使用| select *
从对象数组中选择什么都不做,但我可以按照您的描述访问隐藏的属性。
请注意,其他 cmdlet 也可能会遇到这种情况,即:ConvertTo-Csv
和 Export-Csv
,如果您要按原样导出第一个 object[]
,除非您进行排序,否则您将丢失第三列它由具有最多属性的对象 => | Sort-Object $_.PSObject.Properties.Count -Descending | ConvertTo-Csv
尝试在有和没有排序的情况下进行转换:)
当应用 Format-Table
格式时,如果对象具有 4 个或更少的属性,则会隐式发生这种情况,集合中的 first 对象会根据其属性锁定所有显示列.如果后续对象具有不同的属性,则仅显示与第一个对象共享的对象;如果给定对象不共享,则显示一个空行。这只是一个显示问题,您可以通过将对象传送到... | Format-List
来验证。请参阅the linked duplicate 了解更多信息。
【参考方案1】:
这不是 ConvertFrom-Json 的问题。这与Write-Output missing columns 有关。原因是 PowerShell 默认将输出格式化为表格,并使用第一行来格式化所有行。只需观察这两个对象的显示方式即可。
[PSCustomObject]@
a=1;
[PSCustomObject]@
a=2;b=3;
尝试将输出格式化为列表而不是表格,以查看 ConvertFrom-Json 不会丢失列。
$json | ConvertFrom-Json|Format-List
【讨论】:
以上是关于PowerShell - ConvertFrom-Json 无法正确序列化具有混合属性的 JSON 项目数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell - 一个与 convertfrom-string 相关的奇怪问题