Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Mengendalikan Struktur Kosong Bersarang Dengan Betul Apabila Marshaling ke JSON dalam Go?

Bagaimanakah Saya Mengendalikan Struktur Kosong Bersarang Dengan Betul Apabila Marshaling ke JSON dalam Go?

Susan Sarandon
Lepaskan: 2024-12-18 06:41:10
asal
552 orang telah melayarinya

How Do I Properly Handle Nested Empty Structs When Marshaling to JSON in Go?

Mengendalikan Nested Empty Structs dalam JSON Marshaling in Go

Pengenalan

Apabila menggunakan pengekodan /json pakej dalam Go for marshalling structs to JSON, the ",omitempty" tag boleh digunakan untuk mengecualikan medan kosong daripada JSON yang terhasil. Walau bagaimanapun, teg ini mungkin tidak berkelakuan seperti yang diharapkan untuk struktur bersarang.

Soalan

Pertimbangkan contoh berikut:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}

type Total struct {
    A ColorGroup `json:",omitempty"`
    B string    `json:",omitempty"`
}

group := Total{
    A: ColorGroup{},
}

json.Marshal(group)
Salin selepas log masuk

Dalam senario ini, output JSON hanya perlu memasukkan medan B, kerana medan A kosong. Walau bagaimanapun, output masih termasuk medan A dengan nilai kosong ({"A": {"Name": "", "Colors": null}, "B": null}).

Jawapan

Dokumentasi untuk json marshaling dalam Go menyatakan bahawa medan struct dianggap kosong jika ia ialah:

  • Penunjuk tiada
  • Nilai sifar (mis., palsu, 0)

Dalam contoh yang disediakan, group.A ialah struct kosong, bukan penunjuk nil atau jenis koleksi (cth., kepingan, peta). Oleh itu, ia tidak dianggap sebagai nilai kosong oleh marshaler.

Untuk mencapai tingkah laku yang diingini, seseorang boleh menggunakan penunjuk kepada struct bersarang:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}

type Total struct {
    A *ColorGroup `json:",omitempty"`
    B string    `json:",omitempty"`
}

group := Total{
    B: "abc",
}

json.Marshal(group)
Salin selepas log masuk

Dengan pengubahsuaian ini, JSON output akan termasuk hanya medan B: {"B": "abc"}.

Nota:

  • Jika penunjuk kepada struct bukan sifar diluluskan, ia akan dimasukkan dalam output JSON, walaupun jika ia kosong.
  • Penyelesaian ini hanya boleh digunakan pada struct bersarang. Untuk struct kosong yang tidak bersarang, menggunakan teg ",omitempty" tanpa penunjuk sudah memadai.

Atas ialah kandungan terperinci Bagaimanakah Saya Mengendalikan Struktur Kosong Bersarang Dengan Betul Apabila Marshaling ke JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan