ps/Modules/Cole.PowerShell.Developer/Public/Write-JsonObject.ps1

64 lines
3.0 KiB
PowerShell
Raw Permalink Normal View History

2023-05-30 22:51:22 -07:00
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()
}