Уточнить 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"
}