Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Use prettier formatting for ConvertTo-Json #2736

Copy link
Copy link
@Daniel15

Description

@Daniel15
Issue body actions

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
Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

Issue-Enhancementthe issue is more of a feature request than a bugthe issue is more of a feature request than a bugResolution-FixedThe issue is fixed.The issue is fixed.WG-Cmdletsgeneral cmdlet issuesgeneral cmdlet issues

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.