Go では、json.Marshal 関数が自動的に山括弧 (<, >) をエスケープします。 ;) とアンパサンド (&) を文字列に使用します。ただし、これは状況によっては望ましくない場合があります。
次の例を考えてみましょう。
package main import ( "fmt" "encoding/json" ) 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>このコードは次の出力を出力します。</p> <pre class="brush:php;toolbar:false">Before Marshal {xmlRequest:<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
XML リクエスト文字列の山括弧とアンパサンドは、JSON ではエスケープされます。 Output.
Go 1.7 より前では、json.Marshal がこれらの文字をエスケープするのを防ぐことはできませんでした。ただし、次の回避策があります。
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 エンコーダーを作成します。次に、EscapeHTML オプションを false に設定して、エンコーダが山括弧やアンパサンドを含む HTML 文字をエスケープしないようにします。
このソリューションを独自のカスタム型に適用する場合は、JSON() 関数を次のように変更します。
func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
これで、JSONMarshal を使用してカスタム型をマーシャリングし、山括弧や山括弧のエスケープを防ぐことができます。アンパサンド。
以上がGo で JSON Marshal が山括弧とアンパサンドをエスケープしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。