Powershell 中的非中断(能够往返)ConvertFrom-Json / ConvertTo-Json
Non-broken (round-trip capable) ConvertFrom-Json / ConvertTo-Json in Powershell
默认情况下,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中所讨论的。但是,考虑到这个问题中包含的可疑性质不。
一点点 PEBKAC,一点点为什么会这样?!
这似乎是 -Depth
和修剪逻辑的问题。设置 "higher depth" 会导致 round-trip 行为按预期工作。截断以字符串结尾,而不是说 null
,这似乎很不幸——尽管如果发现 "To String" 是正确的终止符,则可能是一致的。
更改为“”(意外):
PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 2
'{"a":[{"b":""}]}'
Round-trip(预期):
PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 3
'{"a":[{"b":{}}]}'
默认情况下,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中所讨论的。但是,考虑到这个问题中包含的可疑性质不。
一点点 PEBKAC,一点点为什么会这样?!
这似乎是 -Depth
和修剪逻辑的问题。设置 "higher depth" 会导致 round-trip 行为按预期工作。截断以字符串结尾,而不是说 null
,这似乎很不幸——尽管如果发现 "To String" 是正确的终止符,则可能是一致的。
更改为“”(意外):
PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 2
'{"a":[{"b":""}]}'
Round-trip(预期):
PS> '{"a":[{"b":{}}]}' | ConvertFrom-Json | ConvertTo-Json -Compress -Depth 3
'{"a":[{"b":{}}]}'