【问题标题】:Non-broken (round-trip capable) ConvertFrom-Json / ConvertTo-Json in PowershellPowershell 中的完整(可往返)ConvertFrom-Json / ConvertTo-Json
【发布时间】: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 中所述。但是,请考虑到此问题中涵盖的可疑性质。

【问题讨论】:

标签: json powershell roundtrip


【解决方案1】:

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

这似乎是-Depth 和修剪逻辑的问题。设置“更高的深度”会导致往返行为按预期工作。将截断结尾作为字符串而不是 null 似乎很不幸 - 尽管如果发现“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":{}}]}'

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2015-05-25
    • 2018-05-26
    • 2016-04-26
    • 2021-12-31
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多