第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用自定義 MarshalJSON 方法替換 go 序列化中的字符

使用自定義 MarshalJSON 方法替換 go 序列化中的字符

Go
蠱毒傳說 2022-12-19 21:39:32
據(jù)我所知,我只是做了一個定制的MarshalJSON方法來替換這些字符:\u003c和\u003e:https ://go.dev/play/p/xJ-qcMN9QXl在上面的示例中,我通過從包含相同字段的輔助結(jié)構(gòu)發(fā)送到編組來編組類似的結(jié)構(gòu),最后一步是替換我實(shí)際需要的字段和返回。正如您在從MarshalJSON方法返回之前放置的打印中看到的那樣,特殊字符被替換了,但是在調(diào)用json.Marshalfunc 之后,特殊字符保持不變。我在這里缺少但無法弄清楚的東西。感謝你的幫助。謝謝 :)
查看完整描述

1 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個贊

Marshaljson 包的文檔中https://pkg.go.dev/encoding/json#Marshal你會發(fā)現(xiàn)以下段落:

字符串值編碼為強(qiáng)制為有效 UTF-8 的 JSON 字符串,用 Unicode 替換符文替換無效字節(jié)。為了將 JSON 安全地嵌入到 HTML 標(biāo)簽中,字符串使用 HTMLEscape 編碼,它替換了“<”、“>”、“&”,U+2028 和 U+2029 被轉(zhuǎn)義為“\u003c”, “\u003e”、“\u0026”、“\u2028”和“\u2029”。使用編碼器時,可以通過調(diào)用 SetEscapeHTML(false) 禁用此替換。

因此,請嘗試使用Encoder, 示例:

package main


import (

    "bytes"

    "encoding/json"

    "fmt"

)


type Foo struct {

    Name    string

    Surname string

    Likes   map[string]interface{}

    Hates   map[string]interface{}

    newGuy  bool //rpcclonable

}


func main() {

    foo := &Foo{

        Name:    "George",

        Surname: "Denkin",

        Likes: map[string]interface{}{

            "Sports":  "volleyball",

            "Message": "<Geroge> play volleyball <usually>",

        },

    }

    buf := &bytes.Buffer{} // or &strings.Builder{} as from the example of @mkopriva

    enc := json.NewEncoder(buf)

    enc.SetEscapeHTML(false)

    err := enc.Encode(foo)

    if err != nil {

        return

    }

    fmt.Println(buf.String())

}


查看完整回答
反對 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號