意外的数组到字符串转换

时间:2016-04-10 07:13:30

标签: arrays string powershell casting

我正在尝试将数据打包到对象中,然后使用ConvertTo-Json显示它们。下面的测试用例很好地展示了我如何处理数据以及出现了什么问题:

$array = @("a","b","c")
$data = @{"sub" = @{"sub-sub" = $array}}
$output = @{"root" = $data}
ConvertTo-Json -InputObject $data
ConvertTo-Json -InputObject $output

输出(为清晰起见,手工格式化):

          { "sub": { "sub-sub": [ "a", "b", "c" ] }}
{ "root": { "sub": { "sub-sub": "a b c" } }}

如果没有这种奇怪的隐式转换,有没有办法将$data分配给$output

1 个答案:

答案 0 :(得分:5)

正如评论中所提到的,ConvertTo-Json将尝试将对象结构展平超出最大嵌套级别,或深度,通过转换它找到的任何对象超出那个深度到一个字符串。

默认深度为2,但您可以指定它应该更深入地使用Depth参数:

PS C:\> @{root=@{level1=@{level2=@("level3-1","level3-2")}}}|ConvertTo-Json
{
    "root":  {
        "level1":  {
            "level2":  "level3-1 level3-2"
        }
    }
}
PS C:\> @{root=@{level1=@{level2=@("level3-1","level3-2")}}}|ConvertTo-Json -Depth 3
{
    "root":  {
        "level1":  {
            "level2":  [
                "level3-1",
                "level3-2"
            ]
        }
    }
}