我正在尝试创建一个JSON序列化数组。当该数组只包含一个项目时,我得到一个字符串,而不是一个字符串数组(用JSON格式)。
多个项目(按预期工作):
PS C:\> @("one", "two") | ConvertTo-JSON
[
"one",
"two"
]
单项数组(不符合预期):
PS C:\> @("one") | ConvertTo-JSON
"one"
我错过了什么吗?
答案 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>