ホームページ >バックエンド開発 >Golang >Go の `json.Marshal` での '' の JSON エスケープを防ぐ方法は?

Go の `json.Marshal` での '' の JSON エスケープを防ぐ方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 08:41:13195ブラウズ

How to Prevent JSON Escaping of

「<」の JSON エスケープの防止そして「>」 with json.Marshal

json.Marshal を使用して構造体を JSON に変換する場合、「<」などの特殊文字は使用できません。そして「>」は自動的に対応する Unicode にエスケープされます。ただし、これらの文字を元の形式で保存したい場合もあります。

問題ステートメント

次の Go プログラムを考えてみましょう:

package main

import (
    "encoding/json"
    "fmt"
)

type Track struct {
    XmlRequest string `json:"xmlRequest"`
}

func main() {
    message := new(Track)
    message.XmlRequest = "<car><mirror>XML</mirror></car>"
    fmt.Println("Before Marshal", message)
    messageJSON, _ := json.Marshal(message)
    fmt.Println("After marshal", string(messageJSON))
}<p>出力:</p>
<pre class="brush:php;toolbar:false">Before Marshal {<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}

ご覧のとおり、「<」そして「>」文字はそれぞれ「u003c」と「u003e」にエスケープされています。

解決策

Go 1.7 の時点では、json.Marshal には HTML エスケープを無効にするオプションがありません。 。ただし、カスタム関数を使用した回避策があります。

func (t *Track) JSON() ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}

json.Marshal の代わりにこの関数を呼び出すことで、「<」のエスケープを防ぐことができます。

出力:

{"xmlRequest":"<car><mirror>XML</mirror></car>"}

以上がGo の `json.Marshal` での '' の JSON エスケープを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。