Wen

[Go言語] JSONパッケージがHTML文字をエスケープしてしまう問題の解消方法

N views

現象

JSONパッケージで文字列をエンコードすると、HTML文字がエスケープされてしまうようです。

package main

import (
    "encoding/json"
    "fmt"
    "bytes"
)

func main() {
    data := "{'a': 'x < y'}"
    raw, _ := json.Marshal(data)
    fmt.Println(string(raw))
    //output: "{'a': 'x \u003c y'}" ← おそらく期待したものではないでしょう
}

解消方法

package main

import (
    "encoding/json"
    "fmt"
    "bytes"
)

func main() {
    data := "{'a': 'x < y'}"

    var buffer bytes.Buffer
    enc := json.NewEncoder(&buffer)
    enc.SetEscapeHTML(false)
    enc.Encode(data)
    fmt.Println(buffer.String())
    //output: "{'a': 'x < y'}"
}

本記事は 「表示 - 非営利 - 改変禁止 4.0 国際 (CC BY-NC-ND 4.0)」 を採用。