Marshaling JSON []bait sebagai Strings in Go
Apabila mengekodkan struct yang mengandungi []byte medan ke dalam JSON, perwakilan rentetan yang tidak dijangka mungkin hasil. Dalam pengekodan ini, medan []bait disusun sebagai rentetan berkod base64, seperti yang dinyatakan dalam dokumentasi:
"Nilai tatasusunan dan hirisan mengekod sebagai tatasusunan JSON, kecuali []bait mengekod sebagai base64- rentetan yang dikodkan dan sekeping nol dikodkan sebagai objek JSON nol."
Untuk menggambarkan kelakuan ini, pertimbangkan struct Msg berikut:
<code class="go">type Msg struct { Content []byte }</code>
Dalam contoh berikut, rentetan "Hello " ditukar kepada []hirisan bait helloSlc dan diberikan kepada medan Kandungan objek Msg obj:
<code class="go">helloStr := "Hello" helloSlc := []byte(helloStr) obj := Msg{helloSlc}</code>
Setelah mengekod obj kepada JSON menggunakan json.Marshal, JSON yang terhasil mengandungi rentetan berkod base64 perwakilan medan []bait:
<code class="go">json, _ := json.Marshal(obj) fmt.Println(string(json))</code>
Output:
{"Content":"SGVsbG8="}
Untuk mendapatkan nilai rentetan asal "Hello" dalam output JSON, medan []bait perlu dinyahkod secara eksplisit daripada perwakilan berkod base64 sebelum pengekodan kepada JSON. Ini boleh dicapai menggunakan pakej pengekodan/base64:
<code class="go">import ( "encoding/base64" "encoding/json" "fmt" ) type Msg struct { Content string } func main() { helloSlc := []byte("Hello") obj := Msg{string(base64.StdEncoding.EncodeToString(helloSlc))} json, _ := json.Marshal(obj) fmt.Println(string(json)) }</code>
Output:
{"Content":"Hello"}
Atas ialah kandungan terperinci Bagaimana untuk Marshal Medan []bait sebagai String dalam Pengekodan JSON Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!