Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Marshal Medan []bait sebagai String dalam Pengekodan JSON Go?

Bagaimana untuk Marshal Medan []bait sebagai String dalam Pengekodan JSON Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 03:29:02954semak imbas

How to Marshal a []byte Field as a String in Go JSON Encoding?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn