Форматирование PSCustomObject для преобразования в JSON - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь создать 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 Ответ

3 голосов
/ 29 мая 2019

Два трюка: 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...