1

默认情况下,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中所述。但是,请考虑该问题涵盖的可疑性质。

4

1 回答 1

1

一点点PEBKAC,一点点为什么会这样?!

这似乎是-Depth修剪逻辑的问题。设置“更高的深度”会导致往返行为按预期工作。将截断结尾作为字符串而不是 saynull似乎很不幸 - 尽管如果发现“To String”是正确的终止可能是一致的。

更改为“”(意外):

PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 2
'{"a":[{"b":""}]}'

往返(预计):

PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 3
'{"a":[{"b":{}}]}'
于 2019-07-11T18:51:24.363 回答