为什么ConvertTo-Json会丢弃值

Phi*_*ens 1 powershell .net-core

我使用PowerShell来探索REST API.我发现了一个奇怪的异常现象.当我序列化/描述以下responses对象时,对象消失了!我已经验证,当转换为.net对象时,它仍然完好无损,因此从.net对象转换为JSON时会出现问题.

$json  = @'
{
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "body": "54"
          }
        },
        {
          "is": {
            "body": "21"
          }
        },
        {
          "is": {
            "body": "0"
          }
        }
      ]
    }
  ]
}
'@
$json | ConvertFrom-Json | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)

上述转换的结果如下:

{
  "stubs": [
    {
      "responses": "  "
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果我运行这个,我按预期收到54:

$json | ConvertFrom-Json | %{ $_.stubs.responses[0].is.body }  
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu上运行,但不相信这会有所作为.对于Windows上的某些人来说,这应该很容易验证.

Kir*_*kin 6

ConvertTo-Json采用一个可选Depth参数(无论出于何种原因)默认为2.参数本身在链接文档中描述如下:

指定JSON表示中包含的包含对象的级别数.默认值为2.

如果为此参数提供更高的值,它将起作用 - 最大值为100:

$json | ConvertFrom-Json | ConvertTo-Json -Depth 100
Run Code Online (Sandbox Code Playgroud)