Rumah > pembangunan bahagian belakang > Golang > Mengapa Pengekodan JSON Gagal dengan Go Structs Mempunyai Nama Medan Huruf Kecil?

Mengapa Pengekodan JSON Gagal dengan Go Structs Mempunyai Nama Medan Huruf Kecil?

Mary-Kate Olsen
Lepaskan: 2024-12-26 11:27:18
asal
586 orang telah melayarinya

Why Does JSON Encoding Fail with Go Structs Having Lowercase Field Names?

Mengapa Pengekodan JSON Gagal untuk Structs dengan Nama Medan Huruf Kecil dalam Go?

Dalam Go, medan struct hanya boleh dilihat oleh pakej di mana ia ditakrifkan jika huruf pertama mereka adalah huruf besar. Percubaan untuk mengekod struct dengan nama medan huruf kecil, seperti yang ditunjukkan di bawah, akan menghasilkan output JSON kosong:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

func main() {
  m := &Machine{m_ip: "test", m_type: "test", m_serial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{}"
}
Salin selepas log masuk

Ini berlaku kerana medan tidak boleh dilihat oleh fungsi json.Marshal kerana huruf kecilnya dahulu surat. Walau bagaimanapun, menukar nama medan kepada huruf besar, seperti berikut, membolehkan pengekodan JSON berjaya:

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"MachIp\":\"test\",\"MachType\":\"test\",\"MachSerial\":\"test\"}"
}
Salin selepas log masuk

Untuk mengekod struct dengan nama medan huruf kecil, anda boleh menandakan medan dengan kekunci JSON yang dikehendaki. Contohnya:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"m_ip\":\"test\",\"m_type\":\"test\",\"m_serial\":\"test\"}"
}
Salin selepas log masuk

Dengan menandakan medan dengan kekunci JSON yang dikehendaki, struct boleh dikodkan dengan nama medan huruf kecil, menjadikannya lebih mudah untuk senario tertentu.

Atas ialah kandungan terperinci Mengapa Pengekodan JSON Gagal dengan Go Structs Mempunyai Nama Medan Huruf Kecil?. 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