ホームページ >バックエンド開発 >Golang >Go で HTML エスケープを使用せずに JSON マーシャリングを実現するにはどうすればよいですか?

Go で HTML エスケープを使用せずに JSON マーシャリングを実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 07:27:08385ブラウズ

How to Achieve JSON Marshalling without HTML Escaping in Go?

HTML エスケープを使用しない JSON マーシャリング

JSON データをシリアル化する場合、< などの文字を正確に表現できるように、HTML エンティティ エンコーディングを除外することが望ましいことがよくあります。

json.Marshal のデフォルトの動作は、カスタマイズ可能なエスケープ オプションをサポートしていません。ただし、カスタム マーシャラー実装の導入により、この動作をオーバーライドできます。

カスタム マーシャラー

構造体のカスタム MarshalJSON メソッドを実装します。

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

この実装JSON エンコーダー内で EscapeHTML を false に設定し、HTML のエスケープを防止します。 entities.

一般的な解決策

より一般的なアプローチの場合は、任意の構造体にカスタム マーシャリングを適用する関数を定義します。

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

この再利用可能な関数は、次の目的で使用できます。 HTML エスケープを必要とする構造体では、HTML エスケープを避けてください。

例使用法

これらのアプローチのいずれかを使用するには、ターゲットの構造体型で JSON() または JSONMarshal() を呼び出し、必要に応じて結果のバイト スライスを処理するだけです。

この回避策はのみに適用されることに注意してください。シリアル化されるデータを完全に制御できる場合。外部コードまたはサードパーティのライブラリが関係する場合は、予期されるエスケープ動作との互換性を確保することが重要です。

以上がGo で HTML エスケープを使用せずに JSON マーシャリングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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