將JSON []byte 編組為字串
問題:
問題:type Msg struct { Content []byte } func main() { helloStr := "Hello" helloSlc := []byte(helloStr) json, _ := json.Marshal(Msg{helloSlc}) fmt.Println(string(json)) }在Go 中,編碼時包含JSON 形式的[]byte 欄位的結構體,產生的JSON 包含切片內容的非預期字串表示形式。例如,程式碼:
{"Content":"SGVsbG8="}產生JSON 字串:
json.Marshal 對切片內容進行了哪些轉換,原始字串內容如何
答案:
Base64 編碼預設情況下,Go 的json.Marshal 函數將[]byte 數組編碼為用於表示JSON 中原始表示JSON 中原始表示JSON位元組的base64 編碼字串。根據 JSON 規範,JSON 沒有原始位元組的本機表示。
自訂封送處理:import ( "encoding/json" "fmt" ) type Msg struct { Content []byte } func (m Msg) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf(`{"Content": "%s"}`, m.Content)), nil } func main() { helloStr := "Hello" helloSlc := []byte(helloStr) json, _ := json.Marshal(Msg{helloSlc}) fmt.Println(string(json)) }要保留原始字串內容,可以使用自訂封送處理透過為Msg 結構定義自訂MarshalJSON 方法來實現: 此自訂實作將Content 欄位編碼為JSON 物件中的字串,保留其原始內容。
以上是將 Go 結構中的「[]byte」欄位編組為 JSON 時如何保留原始字串內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!