Custom Unmarshal with String Split in Go
Apabila berurusan dengan data JSON, keperluan sering timbul untuk mengubah atau menyesuaikan proses unmarshaling untuk tertentu jenis data. Dalam kes ini, kami ingin membahagikan rentetan JSON yang mengandungi nilai dipisahkan koma kepada []hirisan rentetan semasa menyahmarshaling.
Untuk mencapai ini, mari kita laksanakan unmarshaler tersuai untuk []jenis rentetan:
<code class="go">type strslice []string func (ss *strslice) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } *ss = strings.Split(s, "-") return nil }</code>
Penyahmarshaler tersuai ini mengambil data JSON mentah sebagai input dan menukarnya kepada kepingan rentetan dengan membelahnya pada pembatas yang ditentukan ("-" dalam kes ini).
Dalam struct asal kami , kini kami boleh menggunakan jenis tersuai ini untuk medan Subjek:
<code class="go">type Student struct { StudentNumber int `json:"student_number"` Name string `json:"name"` Subjects strslice `json:"subjects"` }</code>
Ini membolehkan kami menyahmarshal data JSON terus ke dalam struct, dengan medan Subjek dipecahkan secara automatik kepada rentetan individu:
<code class="go">json := `{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}` var s Student if err := json.Unmarshal([]byte(json), &s); err != nil { panic(err) } fmt.Println(s) // Output: {1234567 John Doe [Chemistry Maths History Geography]}</code>
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan JSON Unmarshaling dengan String Split in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!