Преобразование объекта массива JSON в String в Powershell

Я работаю с JSON, который выглядит так:

[
    {
        "Ack":  "no",
        "Rule":  "dont",
        "Tags":  [
                     "server"
                 ],
        "Type":  "blue"
    },

    {
        "Ack":  "no1",
        "Rule":  "knock",
        "Tags":  [
                     "yellow",
                     "green"
                 ],
        "Type":  "multiplecolour"
    }

]

Мне нужно преобразовать массив Tags в строку, разделенную запятыми [и заменить массив преобразованной строкой в ​​файле JSON]. Я пробовал конвертировать из JSON, но я изо всех сил пытаюсь преобразовать массив в строку чистым способом, все еще изучаю PS, поэтому, пожалуйста, терпите меня.

1 ответ

Решение

ConvertFrom-Json может сработать для вас. Вот пример преобразования вашей строки JSON в массив объектов PowerShell с последующим объединением тегов для каждого объекта через разделитель запятой:

$json = @"
[
    {
        "Ack":  "no",
        "Rule":  "dont",
        "Tags":  [
                     "server"
                 ],
        "Type":  "blue"
    },
    {
        "Ack":  "no1",
        "Rule":  "knock",
        "Tags":  [
                     "yellow",
                     "green"
                 ],
        "Type":  "multiplecolour"
    }
]
"@

(ConvertFrom-Json -InputObject $json) `
    | ForEach-Object { $_.Tags = ($_.Tags -join ","); $_ } `
    | ConvertTo-Json `
    | Out-File -FilePath new.json

РЕДАКТИРОВАТЬ: Обратите внимание (как указывает @mklement0) круглые скобки вокруг ConvertFrom-Jsonтребуются для принудительного перечисления результатов в виде массива объектов через конвейер.

Другие вопросы по тегам