function Write-JsonObject { param ( $JsonName, $JsonValue, $Depth = 0, [switch]$OrderedKeys ) $spacesString, $shortSpacesString = (Get-JsonStringLeadsByDepth -Depth $Depth) $quoteString = '"' $commaString = "," $wasSet = $false $stringBuilder = (New-Object System.Text.StringBuilder) $stringBuilder.Append($shortSpacesString) | Out-Null if (![string]::IsNullOrWhiteSpace($JsonName)) { $stringBuilder.Append("$quoteString$JsonName$quoteString : ") | Out-Null } $stringBuilder.AppendLine("{") | Out-Null if (!(Test-IsCollectionNullOrEmpty $JsonValue.PSObject.Properties.Where({$_.MemberType -eq 'NoteProperty'}))) { $JsonValue = $JsonValue.PSObject.Properties.Where({$_.MemberType -eq 'NoteProperty'}) } if ($OrderedKeys) { $JsonValue = $JsonValue | Sort-Object -Property Name, Key, Id } $keys = $JsonValue.Keys if (Test-IsCollectionNullOrEmpty $keys) { $keys = $JsonValue.Name } foreach ($key in $keys) { $iter = $JsonValue[$key] if ($null -eq $iter) { $posit = $JsonValue.Where({$_.Name -eq $key}) if ($null -ne $posit) { $iter = $posit.Value } } if ($null -eq $iter) { $evaluatedValue = (Write-JsonNameStringValuePair -JsonName $key -JsonValue $iter -Depth ($Depth + 1) -OrderedKeys:$OrderedKeys) $stringBuilder.AppendLine($evaluatedValue) | Out-Null } else { if ($iter -ceq "False") { $iter = $false } if ($iter -ceq "True") { $iter = $true } if ($iter.GetType().Name -match 'byte|short|int32|long|sbyte|ushort|uint32|ulong|float|double|decimal|boolean') { $evaluatedValue = (Write-JsonNamePrimitiveValuePair -JsonName $key -JsonValue $iter -Depth ($Depth + 1) -OrderedKeys:$OrderedKeys) $stringBuilder.AppendLine($evaluatedValue) | Out-Null } elseif ($iter -is [string]) { $evaluatedValue = (Write-JsonNameStringValuePair -JsonName $key -JsonValue $iter -Depth ($Depth + 1) -OrderedKeys:$OrderedKeys) $stringBuilder.AppendLine($evaluatedValue) | Out-Null } elseif ($iter.GetType().IsArray) { # values are an array, so let's write the array values $evaluatedValue = (Write-JsonArrayNameValuePair -JsonName $key -JsonValue $iter -Depth ($Depth + 1) -OrderedKeys:$OrderedKeys) $stringBuilder.AppendLine( $evaluatedValue ) | Out-Null } else { # It was not an array, or a primitive, so it must be _another_ object? $evaluatedValue = (Write-JsonObject -JsonName $key -JsonValue $iter -Depth ($Depth + 1) -OrderedKeys:$OrderedKeys) $stringBuilder.AppendLine($evaluatedValue) | Out-Null } } } $stringBuilder.Append($shortSpacesString).Append("}").Append($commaString) | Out-Null return $stringBuilder.ToString() }