Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyesuaikan JSON Unmarshaling dengan String Split in Go?

Bagaimana untuk Menyesuaikan JSON Unmarshaling dengan String Split in Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 04:23:02564semak imbas

How to Customize JSON Unmarshaling with String Split in Go?

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!

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