格式化PSCustomObject以转换为JSON

时间:2019-05-28 22:15:48

标签: json powershell

我正在尝试创建一个PSCustomObject,稍后将其通过ConvertTo-JSON进行管道传输,但是我似乎无法正确地获得PSCustomObject的格式。问题似乎在于,我希望对所得的JSON进行格式化的方式包括锯齿状的数组,但是正确的Powershell语法使我难以理解。

这就是我拥有的

$RetrievalParamsBodyObj = [PSCustomObject]@{
    things = @(@{
                field="date_created"
                operator="within"
                value="7"
            })
    }

当我通过ConvertTo-JSON传递它时,它看起来像这样:

$RetrievalParamsBodyObj | ConvertTo-JSON
{
    "things": [
        {
             "field":  "date_created",
             "operator":  "within",
             "value":  "7"
         }
     ]
}

但是我希望它看起来像这样:

{
    "things": [
        [{
            "field": "date_created",
            "operator": "within last",
            "value": "7"
        }]
    ]
}

我尝试在哈希表周围包装一个附加数组,但这似乎没有任何效果。

1 个答案:

答案 0 :(得分:3)

两种技巧: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序列化程序。