Rumah > Artikel > pembangunan bahagian belakang > Mengapakah json.Marshal dengan json.RawMessage mengembalikan rentetan berkod Base64?
Apabila memanggil json.Marshal dengan nilai json.RawMessage, hasilnya adalah tidak dijangka. Daripada rentetan JSON yang dikehendaki, rentetan yang dikodkan base64 dikembalikan.
package main import ( "encoding/json" "fmt" ) func main() { raw := json.RawMessage(`{"foo":"bar"}`) j, err := json.Marshal(raw) if err != nil { panic(err) } fmt.Println(string(j)) // Output: "eyJmb28iOiJiYXIifQ==" }
Isunya terletak pada penggunaan json.RawMessage dalam json.Marshal. Jenis json.RawMessage, yang direka untuk menyimpan data JSON mentah tanpa menyahkodnya, mempunyai kaedah MarshalJSON yang hanya mengembalikan kepingan bait.
func (m *RawMessage) MarshalJSON() ([]byte, error) { return *m, nil }
Walau bagaimanapun, agar json.Marshal berfungsi dengan betul dengan json.RawMessage, nilai yang diluluskan mestilah penunjuk kepada contoh json.RawMessage.
j, err := json.Marshal(&raw)
Dengan menghantar penunjuk kepada json.RawMessage, kaedah MarshalJSON digunakan pada penunjuk, memastikan bahawa kepingan bait dikembalikan tanpa base64 pengekodan.
package main import ( "encoding/json" "fmt" ) func main() { raw := json.RawMessage(`{"foo":"bar"}`) j, err := json.Marshal(&raw) if err != nil { panic(err) } fmt.Println(string(j)) // Output: "{"foo":"bar"}" }
Atas ialah kandungan terperinci Mengapakah json.Marshal dengan json.RawMessage mengembalikan rentetan berkod Base64?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!