Powershell - добавить блок «Данные» при конвертировании в JSON - PullRequest
0 голосов
/ 19 апреля 2020

Как добавить блок "data" : [ при использовании $var | convertTo-Json?

Фактический вывод $var - это просто объект с некоторыми свойствами, который затем преобразуется в json с помощью команды convertTo-Json .

Вот что я получаю:

[
    {
        "controllerID":  "0",
        "DiskID":  "0:1:0",
        "cName":  "PERCS130",

    },
    {
        "controllerID":  "0",
        "DiskID":  "0:1:1",
        "cName":  "PERCS130",
    }
]

Но мне нужно что-то вроде этого:

{
    "data": [
        {
            "controllerID":  "0",
            "DiskID":  "0:1:0",
            "cName":  "PERCS130",

        },
        {
            "controllerID":  "0",
            "DiskID":  "0:1:1",
            "cName":  "PERCS130",
        }
    ]
}

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Показанный вами JSON недействителен из-за запятой после "cName": "PERCS130". Вероятно, это связано с тем, что вы удалили все здесь.

Что вам нужно сделать, это создать новый json, где новый элемент data содержит текущий json в виде массива:

$json = @"
[
    {
        "controllerID":  "0",
        "DiskID":  "0:1:0",
        "cName":  "PERCS130"
    },

    {
        "controllerID":  "0",
        "DiskID":  "0:1:1",
        "cName":  "PERCS130"
    }
]
"@ | ConvertFrom-Json

$newjson = @{'data' = @($json)}
$newjson | ConvertTo-Json -Depth 3  # you may need to up the Depth value

Результат:

{
    "data":  [
                 {
                     "controllerID":  "0",
                     "DiskID":  "0:1:0",
                     "cName":  "PERCS130"
                 },
                 {
                     "controllerID":  "0",
                     "DiskID":  "0:1:1",
                     "cName":  "PERCS130"
                 }
             ]
}

PowerShell не выдает «симпатичный» json. Если вам нужно преобразовать его в правильно расположенные json, см. Мою функцию Формат- Json

0 голосов
/ 19 апреля 2020

Вот способ создать новый объект со свойством массива данных, содержащим $ var:

$newvar = [pscustomobject]@{data = $var}
$newvar

data
----
{@{controllerID=0; DiskID=0:1:0; cName=PERCS130}, @{controllerID=0; DiskID=0:1:1; cName=PERCS130}}

Затем вы можете сделать convertto- json:

$newvar | convertto-json

{
  "data": [
    {
      "controllerID": "0",
      "DiskID": "0:1:0",
      "cName": "PERCS130"
    },
    {
      "controllerID": "0",
      "DiskID": "0:1:1",
      "cName": "PERCS130"
    }
  ]
}

Или с помощью json в файле, и если у вас есть JQ. Тот же вывод.

get-content file.json | jq '{data:.}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...