Functions/Format-JsonOrder.ps1
Function Format-JsonOrder { <# .SYNOPSIS Sorts JSON output. .DESCRIPTION Reformats a JSON string so the output looks better than what ConvertTo-Json outputs. .PARAMETER InputObject Required: The JSON text to sort. Can be object or json string .PARAMETER PropertyStartList Optional: The list of properties to put at the start of the json object. .PARAMETER PropertyEndList Optional: The list of properties to put at the end of the json object. .PARAMETER OnlyListedProperties Optional: Only list the properties that are in the PropertyStartList and PropertyEndList. .PARAMETER SortAlphabetically Optional: Sort the properties alphabetically. .PARAMETER IgnoreCaseSensitivity Optional: Ignore casesentive ordering. .PARAMETER Recursive Optional: Sort the properties that are arrays or objects. .EXAMPLE $json | ConvertFrom-Json | Format-JsonOrder -PropertyStartList @('policyType','displayName') -PropertyEndList @('policyRule') -SortAlphabetically .EXAMPLE $json | Format-JsonOrder -PropertyStartList @('policyType','displayName') -PropertyEndList @('policyRule') -SortAlphabetically .EXAMPLE $json | Format-JsonOrder -SortAlphabetically -Recursive .LINK ConvertTo-OrderObject ConvertTo-Json #> [CmdletBinding()] param( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] [Alias('InputObject')] $Json, [Parameter(Mandatory = $false)] [Alias('StartList')] [string[]]$PropertyStartList, [Parameter(Mandatory = $false)] [Alias('EndList')] [string[]]$PropertyEndList, [Parameter(Mandatory = $false)] [Alias('OnlyListed')] [switch]$OnlyListedProperties, [Parameter(Mandatory = $false)] [Alias('Ascending')] [switch]$SortAlphabetically, [Parameter(Mandatory = $false)] [Alias('CaseInSensitive')] [switch]$IgnoreCaseSensitivity, [Parameter(Mandatory = $false)] [Alias('Recurse')] [switch]$Recursive ) Begin{ ## Get the name of this function [string]${CmdletName} = $PSCmdlet.MyInvocation.MyCommand.Name $jsonList = @() } Process{ Foreach($JsonItem in $Json) { If($JsonItem -is [string]){ Write-Verbose ("{0} --------> Converting json to object..." -f ${CmdletName}) $JsonObj = ($JsonItem | ConvertFrom-Json) }Else{ Write-Verbose ("{0} --------> Using an object..." -f ${CmdletName}) $JsonObj = $JsonItem } $Params = @{ Object = $JsonObj } If($PropertyStartList.Count -gt 0){ $Params.PropertyStartList = $PropertyStartList } If($PropertyEndList.Count -gt 0){ $Params.PropertyEndList = $PropertyEndList } If($OnlyListedProperties -eq $true){ $Params.OnlyListedProperties = $true } If($SortAlphabetically -eq $true){ $Params.SortAlphabetically = $true } If($IgnoreCaseSensitivity -eq $true){ $Params.IgnoreCaseSensitivity = $true } If($Recursive -eq $true){ $Params.Recursive = $true } Write-Debug ("{0} ----------> Used Params: {1}" -f ${CmdletName}, ($Params | Out-String)) $jsonList += ConvertTo-OrderObject @Params } } End{ Write-Verbose ("{0} --------> Returning json:" -f ${CmdletName}) return $jsonList | ConvertTo-Json -Depth 100 } } Set-Alias -Name Sort-Json -Value Format-JsonOrder |