意外的数组到字符串转换

Bál*_*ász 0 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
Run Code Online (Sandbox Code Playgroud)

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

          { "sub": { "sub-sub": [ "a", "b", "c" ] }}
{ "root": { "sub": { "sub-sub": "a b c" } }}
Run Code Online (Sandbox Code Playgroud)

有没有什么办法来分配$data$output没有这个怪异的隐式转换?

Mat*_*sen 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"
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)