Уточнить json в powershell 3

Учитывая стандартное значение json string:

$jsonString = '{ "baz": "quuz", "cow": [ "moo", "cud" ], "foo": "bar" }'

Как я могу заставить это быть красивым с символами новой строки, желательно без регулярного выражения грубой силы?

Самый простой метод, который я нашел до сих пор:

$jsonString | ConvertFrom-Json | ConvertTo-Json 

Однако это кажется глупым.

Ответ 1

Работает для меня. Скобки гарантируют, что get-content выполняется перед передачей. Глубина по умолчанию для convertto-json равна 2, что часто слишком мало.

function pjson ($jsonfile) {
  (get-content $jsonfile) | convertfrom-json | convertto-json -depth 100 | 
    set-content $jsonfile
}

Ответ 2

Если вы действительно не хотите пропустить самый простой маршрут, который должен использовать встроенные функции PowerShell | ConvertFrom-Json | ConvertTo-Json, вот еще один метод, используя JSON.net

# http://james.newtonking.com/projects/json-net.aspx
Add-Type -Path "DRIVE:\path\to\Newtonsoft.Json.dll"

$jsonString = '{ "baz": "quuz", "cow": [ "moo", "cud" ], "foo": "bar" }'
[Newtonsoft.Json.Linq.JObject]::Parse($jsonString).ToString()

Ответ 3

Я думаю, что вы ищете:

$jsonString = @{ 
'baz' = 'quuz'
'cow'= "moo, cud"
'foo'= "bar" 
}
$jsonString|ConvertTo-Json

он производит этот вывод

{
    "baz":  "quuz",
    "cow":  "moo, cud",
    "foo":  "bar"
}

Добавлена ​​заметка Вы также можете массировать значения вашей коровы, чтобы "немного убрать":

 $jsonString = @{ 
    'baz' = 'quuz'
    'cow'= @("moo"; "cud")
    'foo'= "bar" 
    }

выход:

{
    "baz":  "quuz",
    "cow":  [
                "moo",
                "cud"
            ],
    "foo":  "bar"
}