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

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

Barbara Streisand
リリース: 2024-12-10 07:27:08
オリジナル
455 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート