53

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

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

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

单项数组(不像预期的那样):

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

我错过了什么吗?

4

6 回答 6

85

尝试不使用管道:

PS C:\> ConvertTo-Json @('one', 'two')
[
    "one",
    "two"
]
PS C:\> ConvertTo-Json @('one')
[
    "one"
]
于 2013-09-06T17:56:25.053 回答
26

我也遇到了这个问题,但这是因为我的结构太深,并且 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"
                              ]
                    }
          }
}
于 2017-04-20T23:26:03.240 回答
5

我刚刚遇到了同样的问题并发现,您可以将一个附加-AsArrayConvertTo-Json命令中。例子:

❯ @("one") | ConvertTo-Json -AsArray       
[
  "one"
]
❯ @("one", "two") | Convert-ToJson -AsArray
[
  "one",
  "two"
]
于 2021-08-09T10:23:47.830 回答
3

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

解决这个问题的两件事:

我必须将-Depth参数设置为ConvertTo-Json

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

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

$myArray.Add([pscustomobject]@{prop1 = ""; prop2 = "" })
于 2020-02-26T21:16:43.713 回答
3

今天面临同样的问题。只是补充一下,如果你有这样的对象

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

那么您必须将其指定为

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

双 @s 有时会变得混乱。

于 2018-07-02T09:56:57.663 回答
0

将 a , 放在 @ 前面:

,@("one") | ConvertTo-Json
[
  "one"
]
于 2022-02-10T18:13:13.230 回答