Teg JSON Berbilang untuk Medan Struktur
Dalam senario di mana anda menerima data JSON daripada pelayan dan perlu menyahmarshalnya menjadi struct, anda mungkin menghadapi situasi di mana anda ingin mewakili data yang sama dengan tag JSON yang berbeza untuk yang berbeza tujuan.
Memperibadikan Teg JSON
Teg JSON menentukan nama medan yang digunakan dalam perwakilan JSON. Secara lalai, teg medan adalah sama dengan nama medan. Walau bagaimanapun, anda boleh menyesuaikan teg untuk menukar nama yang digunakan semasa mensiri atau menyahsiri struct.
Teg JSON Tunggal
Menggunakan teg JSON tunggal adalah mudah. Hanya tentukan teg yang diingini sebagai rentetan literal:
type Foo struct { Name string `json:"name"` Age int `json:"age"` }
Berbilang Teg JSON
Seperti yang dinyatakan dalam soalan, tidak mungkin untuk melampirkan berbilang teg JSON terus ke satu bidang. Walau bagaimanapun, terdapat teknik yang membolehkan anda mengatasi had ini.
Pemutus Struktur
Penyelesaian yang diberikan mencadangkan penggunaan dua struct yang mempunyai reka letak medan yang sama. Contohnya:
type Foo struct { Name string Age int } type Bar struct { Name string `json:"employee_name"` Age int `json:"-"` }
Kemudian, anda boleh menghantar struct Foo ke struct Bar untuk menukar tag JSON. Teknik ini amat berguna apabila anda mempunyai sejumlah besar medan:
foo := Foo{Name: "Sam", Age: 20} bar := (*Bar)(unsafe.Pointer(&foo))
Awas
Adalah penting untuk ambil perhatian bahawa struct kedua harus tidak dieksport untuk mengelakkannya daripada diakses di luar pakej semasa anda. Ini memastikan bahawa tuangan hanya dilakukan seperti yang dimaksudkan dan tidak disalahgunakan secara tidak sengaja.
Contoh
Kod berikut menunjukkan teknik tuangan yang dinyatakan di atas:
package main import ( "encoding/json" "fmt" ) type Foo struct { Name string Age int } type Bar struct { Name string `json:"employee_name"` Age int `json:"-"` } func main() { foo := Foo{Name: "Sam", Age: 20} bar := (*Bar)(unsafe.Pointer(&foo)) jsonBytes, err := json.Marshal(bar) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonBytes)) }
Kod ini berjaya menyerikan data struktur Foo menggunakan tag JSON yang ditakrifkan dalam struktur Bar. Ia menghasilkan output JSON berikut:
{"employee_name":"Sam"}
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Berbilang Tag JSON untuk Medan Struktur Tunggal dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!