格式化PSCustomObject以转换为JSON
我正在尝试创建一个PSCustomObject,稍后将通过管道格式化PSCustomObject以转换为JSON,json,powershell,Json,Powershell,我正在尝试创建一个PSCustomObject,稍后将通过管道转换为JSON,但我似乎无法正确设置PSCustomObject的格式。问题似乎在于,我希望生成的JSON的格式化方式包括一个锯齿状数组,但我无法理解正确的Powershell语法 这是我所拥有的 $RetrievalParamsBodyObj = [PSCustomObject]@{ things = @(@{ field="date_created" oper
转换为JSON
,但我似乎无法正确设置PSCustomObject的格式。问题似乎在于,我希望生成的JSON的格式化方式包括一个锯齿状数组,但我无法理解正确的Powershell语法
这是我所拥有的
$RetrievalParamsBodyObj = [PSCustomObject]@{
things = @(@{
field="date_created"
operator="within"
value="7"
})
}
当我通过converttojson
传递它时,它看起来是这样的:
$RetrievalParamsBodyObj | ConvertTo-JSON
{
"things": [
{
"field": "date_created",
"operator": "within",
"value": "7"
}
]
}
{
"things": [
[{
"field": "date_created",
"operator": "within last",
"value": "7"
}]
]
}
但我希望它看起来像这样:
$RetrievalParamsBodyObj | ConvertTo-JSON
{
"things": [
{
"field": "date_created",
"operator": "within",
"value": "7"
}
]
}
{
"things": [
[{
"field": "date_created",
"operator": "within last",
"value": "7"
}]
]
}
我尝试在哈希表周围包装一个附加数组,但似乎没有任何效果。两个技巧:1)在内部数组前面加逗号,以便Powershell知道它是嵌套数组而不是串联数组;2)确保设置深度:
[PSCustomObject]@{
things = @(,@(@{
field="date_created"
operator="within"
value="7"
}))
} | ConvertTo-Json -Depth 5
输出:
{
"things": [
[
{
"field": "date_created",
"operator": "within",
"value": "7"
}
]
]
}
。。。在语法上与所需输出相同。要以不同的格式格式化,您需要创建一个自定义JSON序列化程序 +1,但是请注意,您根本不需要外部的
@(…)
,您可以用另一个一元,
替换内部的@(…)
。最终,混淆源于将@(…)
误认为是数组构造操作符,而它只是数组的“保证人”。