【问题标题】:ConvertTo-Json flattens arrays over 3 levels deep [duplicate]ConvertTo-Json 将数组展平超过 3 层 [重复]
【发布时间】:2017-02-24 20:58:32
【问题描述】:

在 powershell 中,以下会产生正确的结果。

$foo = @{}
$foo.bar = @{}
$foo.bar.buzz = @("herp","derp")
ConvertTo-Json $foo

{                                     
  "bar":  {                         
    "buzz":  [            
      "herp",  
      "derp"   
    ]            
  }                         
}

但是,如果我再添加一个级别,则数组“buzz”会被展平为字符串

$foo = @{}
$foo.bar = @{}
$foo.bar.buzz = @{}
$foo.bar.buzz.bazz = @("herp","derp")
ConvertTo-Json $foo

{
  "bar":  {
    "buzz":  {
      "bazz": "herp derp"
    }
  }
}

为什么 powershell 会将数组扁平化为字符串? 这个问题感觉类似于以下 SO 问题,但没有一个有目的的解决方案可以解决它。

why-does-powershell-silently-convert-a-string-array-with-one-item-to-a-string

what-determines-whether-the-powershell-pipeline-will-unroll-a-collection

【问题讨论】:

  • 这个问题很好,因为重复的标题描述得不够好。这个标题要好得多。

标签: arrays powershell


【解决方案1】:

来自ConvertTo-Json documentation

-深度

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

-Depth 9 选项添加到ConvertTo-Json 可解决此问题

ConvertTo-Json -Depth 9 $foo

另外,ConvertTo-Json $foo$foo | ConvertTo-Json 之间也有区别。尽可能使用ConvertTo-Json $foo

convertto-json-an-array-with-a-single-item

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多