How to remove special chars in JSON file format

Sometimes you want to write out an object in JSON format to a file. This is fine and what you would normally use ConvertTo-Json for.

The only issue is the generated JSON will convert some chars like < to \u003c which is not ideal for your JSON output. This seems to be a limitation with the PowerShell command.

To fix this, use this Regex snippet below to replace the escaped tokens in your output to make the file more readable.

$data | ConvertTo-Json -Depth 10 | ForEach-Object { [Regex]::Replace($_, "\\u(?<Value>[a-zA-Z0-9]{4})", { param($m) ([char]([int]::Parse($m.Groups['Value'].Value, [System.Globalization.NumberStyles]::HexNumber))).ToString() } )} | Out-File $OutputFilename -Force

This will turn your output from:

"Key": "WLSProtocol",
"Values": {
"Test": "\u003chttpsTransport maxReceivedMessageSize=\"1255360\"/\u003e",
"Staging": "\u003chttpsTransport maxReceivedMessageSize=\"1255360\"/\u003e",
"Production": "\u003chttpsTransport maxReceivedMessageSize=\"1255360\"/\u003e"
}

to

"Key": "WLSProtocol",
"Values": {
"Test": "<httpsTransport maxReceivedMessageSize=\"1255360\"/>",
"Staging": "<httpsTransport maxReceivedMessageSize=\"1255360\"/>",
"Production": "<httpsTransport maxReceivedMessageSize=\"1255360\"/>",
}

Note: you still will need to escape some chars like " and \ but these are more managable.