为什么ConvertTo-Json会降低值

时间:2018-11-17 19:18:24

标签: 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

上述转换的结果是:

{
  "stubs": [
    {
      "responses": "  "
    }
  ]
}

如果运行此命令,则会收到 54 ,如预期的那样:

$json | ConvertFrom-Json | %{ $_.stubs.responses[0].is.body }  

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

1 个答案:

答案 0 :(得分:6)

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

  

指定JSON表示形式中包含多少级所包含的对象。默认值为2。

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

$json | ConvertFrom-Json | ConvertTo-Json -Depth 100