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