Marshalling json.RawMessage Mengembalikan Rentetan Berkod Base64
Soalan:
Apabila menyusun a json.RawMessage nilai, mengapa output rentetan berkod base64 dan bukannya JSON mentah?
Latar Belakang:
Kod di bawah menunjukkan isu:
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)) }
Dijangka Output:
{"foo":"bar"}
Sebenar Output:
"eyJmb28iOiJiYXIifQ=="
Jawapan:
Kaedah MarshalJSON jenis json.RawMessage hanya mengembalikan kepingan bait asas. Walau bagaimanapun, untuk json.RawMessage berfungsi dengan betul, nilai yang dihantar kepada json.Marshal mestilah penunjuk.
Penyelesaian:
Untuk menyelesaikan isu, kemas kini kod seperti berikut:
j, err := json.Marshal(&raw)
Atas ialah kandungan terperinci Mengapakah menggabungkan nilai json.RawMessage menghasilkan rentetan berkod base64 dan bukannya JSON mentah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!