【发布时间】:2019-07-12 02:57:28
【问题描述】:
默认情况下,PowerShell 无法可靠地往返 JSON。如何确保此类 JSON 正确往返?
这是一个损坏的往返序列化的最小示例:
PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress
{"a":[{"b":""}]}
从 {} 到 "" 的意外更改导致 JSON 不再有效。
这是5.1版以下:
PS> $PSVersionTable.PSVersion.ToString()
5.1.15063.674
同样,'[{"b":{}]' | ConvertFrom-Json | ConvertTo-Json 也存在问题,如https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/15123162-convertto-json-doesn-t-serialize-simple-objects-pr 中所述。但是,请考虑到此问题中未涵盖的可疑性质。
【问题讨论】:
-
这似乎是
-Depth的问题。设置“更高的深度”会导致往返行为按预期工作。将深度结尾作为“字符串”而不是null,是非常不幸的。 -
ConvertTo-Json 的默认深度为 2 且无警告已被经常讨论。
-
@js2010 请投票以关闭重复。我希望我能在我的日子里早找到这样“经常被谈论”的讨论......
标签: json powershell roundtrip