ConvertTo-JSON是一个包含单个项目的数组

时间:2013-09-06 17:05:10

标签: powershell powershell-v3.0

我正在尝试创建一个JSON序列化数组。当该数组只包含一个项目时,我得到一个字符串,而不是一个字符串数组(用JSON格式)。

多个项目(按预期工作):

PS C:\> @("one", "two") | ConvertTo-JSON
[
    "one",
    "two"
]

单项数组(不符合预期):

PS C:\> @("one") | ConvertTo-JSON
"one"

我错过了什么吗?

5 个答案:

答案 0 :(得分:41)

在没有管道的情况下尝试:

PS C:\> ConvertTo-Json @('one', 'two')
[
    "one",
    "two"
]
PS C:\> ConvertTo-Json @('one')
[
    "one"
]

答案 1 :(得分:10)

我也遇到了这个问题但是因为我的结构太深而且ConvertTo-Json将一定深度以下的所有东西变平为一个字符串。

例如:

PS C:\> $MyObject = @{ "a" = @{ "b" = @{ "c" = @("d") } } }
PS C:\> ConvertTo-Json $MyObject
{
    "a":  {
              "b":  {
                        "c":  "d"
                    }
          }
}

要解决此问题,您可以将更大的值传递给-Depth

PS C:\> ConvertTo-Json $MyObject -Depth 100
{
    "a":  {
              "b":  {
                        "c":  [
                                  "d"
                              ]
                    }
          }
}

答案 2 :(得分:3)

我遇到了一个对象中的子数组的问题。数组中有一个对象,ConvertTo-Json正在删除数组中的对象。

要解决此问题的两件事:

我必须在-Depth上设置ConvertTo-Json参数

$output = $body | ConvertTo-Json -Depth 10

我必须在数组中将对象创建为哈希表,然后将其转换为对象

$myArray.Add([pscustomobject]@{prop1 = ""; prop2 = "" })

答案 3 :(得分:2)

今天也遇到了同样的问题。仅添加,如果您有这样的对象

@{ op="replace"; path="clientName"; value="foo"}

然后您必须将其指定为

ConvertTo-Json @( @{ op="replace"; path="clientName"; value="foo"} )

双@s有时会造成混乱。

答案 4 :(得分:1)

我刚刚遇到了同样的问题,并发现您可以将 ConvertTo-Json 附加到 ❯ @("one") | ConvertTo-Json -AsArray [ "one" ] 命令。 示例:

❯ @("one", "two") | Convert-ToJson -AsArray
[
  "one",
  "two"
]
<Switch>
    {AppRoutes.map((route, i) => (
        <Route
            path={route.path}
            component={route.component}
        />
    ))}
</Switch>