具有嵌入式哈希表的Powershell ConvertTo-json

And*_*ipe 33 powershell powershell-3.0

我遇到了ConvertTo-Json的问题,并试图了解行为和/或我做错了什么.

考虑这一系列命令:

$val=@{ID=10;Config=@{ID=11;Config=@{ID=12;Config='end'}}}
ConvertTo-json $val
ConvertTo-json @($val)
Run Code Online (Sandbox Code Playgroud)

第一次转换给出了这个输出:

{
    "ID":  10,
    "Config":  {
                   "ID":  11,
                   "Config":  {
                                  "ID":  12,
                                  "Config":  "end"
                              }
               }
}
Run Code Online (Sandbox Code Playgroud)

第二次转换给出了这个输出:

[
    {
        "ID":  10,
        "Config":  {
                       "ID":  11,
                       "Config":  "System.Collections.Hashtable"
                   }
    }
]
Run Code Online (Sandbox Code Playgroud)

似乎在数组中,转换是不正确的.有关为什么会发生这种情况的任何想法?

JPB*_*anc 59

这是深度问题,默认值是2,你可以尝试:

ConvertTo-json @($val) -Depth 5
Run Code Online (Sandbox Code Playgroud)

  • IMO,默认值为2违反了[最不惊讶的原则](http://en.wikipedia.org/wiki/Principle_of_least_astonishment).脚本编写者希望在大多数情况下正确地序列化整个对象图.绝对是这个cmdlet上的错误API设计. (14认同)
  • 很好,今天花了很多时间试图找出为什么深度3的一些JSON出现为"@ {name = 1.0}"`.我甚至问了一个问题和所有事情,然后才最终碰到这个事故. (2认同)