The output from ConvertTo-Json is pretty ugly at the moment:
@{
foo = @{
first = 'a'
second = 'bbbbbbbb'
}
barbarbarbar = @{
first = 'a'
second = 'bbbbbbbb'
}
dan = 15
} | ConvertTo-Json
Results in:
{
"dan": 15,
"foo": {
"second": "bbbbbbbb",
"first": "a"
},
"barbarbarbar": {
"second": "bbbbbbbb",
"first": "a"
}
}
The formatting is all over the place. On the other hand, pretty much every other JSON library will produce something like this:
{
"dan": 15,
"foo": {
"second": "bbbbbbbb",
"first": "a"
},
"barbarbarbar": {
"second": "bbbbbbbb",
"first": "a"
}
}
The standard JSON.NET pretty printing (Newtonsoft.Json.Formatting.Indented) may be useful, as it formats the JSON "correctly".
This is my current workaround to properly formatting JSON in PowerShell, it's a bit messy though:
# Formats JSON in a nicer format than the built-in ConvertTo-Json does.
function Format-Json([Parameter(Mandatory, ValueFromPipeline)][String] $json) {
$indent = 0;
($json -Split '\n' |
% {
if ($_ -match '[\}\]]') {
# This line contains ] or }, decrement the indentation level
$indent--
}
$line = (' ' * $indent * 2) + $_.TrimStart().Replace(': ', ': ')
if ($_ -match '[\{\[]') {
# This line contains [ or {, increment the indentation level
$indent++
}
$line
}) -Join "`n"
}
(usage is like $foo | ConvertTo-Json | Format-Json)
This looks consistent across both PowerShell 5 and 6
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.14965.1001
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14965.1001
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
> $PSVersionTable
Name Value
---- -----
PSVersion 6.0.0-alpha
PSEdition Core
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 3.0.0.0
GitCommitId v6.0.0-alpha.12
CLRVersion
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
The output from
ConvertTo-Jsonis pretty ugly at the moment:Results in:
{ "dan": 15, "foo": { "second": "bbbbbbbb", "first": "a" }, "barbarbarbar": { "second": "bbbbbbbb", "first": "a" } }The formatting is all over the place. On the other hand, pretty much every other JSON library will produce something like this:
{ "dan": 15, "foo": { "second": "bbbbbbbb", "first": "a" }, "barbarbarbar": { "second": "bbbbbbbb", "first": "a" } }The standard JSON.NET pretty printing (
Newtonsoft.Json.Formatting.Indented) may be useful, as it formats the JSON "correctly".This is my current workaround to properly formatting JSON in PowerShell, it's a bit messy though:
(usage is like
$foo | ConvertTo-Json | Format-Json)This looks consistent across both PowerShell 5 and 6