64 lines
3.0 KiB
PowerShell
64 lines
3.0 KiB
PowerShell
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()
|
|
} |