steven
steven

Reputation: 269

Json Encoding HTML string

I'm currently producing a JSON file from a PowerShell script but it is outputting Unicode instead of special characters such as '<' I need HTML in the LinkText but not sure how to change the encoding.

This is the output I'm getting:

[
    {
        "Id":  "187303",
        "LinkText":  "\u003cb style =color:#d11717;\u0027\u003eAnnual General Meeting (MEET)"
    },
    {
        "Id":  "187305",
        "LinkText":  "\u003cb style =color:#d11717;\u0027\u003eAnnual General Meeting (MEET)"
    }
]

This is the code that I'm using:

$(foreach ($row in $DataSet.Tables[0].Rows){  
    $stockShortName = $row[0].ToString().Trim()
    $id = $row[0].ToString().Trim()
    $linkText = "<b style =color:`#d11717;'>$event_description" 

    (New-Object PSObject |
     Add-Member -PassThru NoteProperty Id $id |
     Add-Member -PassThru NoteProperty LinkText $linkText 
    )
}) | ConvertTo-JSON | Out-File $OutputFile -Encoding "default"

Upvotes: 6

Views: 4023

Answers (2)

Shay Levy
Shay Levy

Reputation: 126842

I don't see a built-in parameter to prevent that conversion from happening. Here's a workaround that converts back unicode characters:

[regex]::replace($json,'\\u[a-fA-F0-9]{4}',{[char]::ConvertFromUtf32(($args[0].Value -replace '\\u','0x'))})

Upvotes: 4

Serjx86
Serjx86

Reputation: 530

Out-File is not a culprit here, it writes exactly what ConverTo-Json produces. However, if you pipe your output into ConvertFrom-Json, it works just fine. Are you sure it's a problem?

Upvotes: 0

Related Questions