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
Mary-Kate Olsenasal
2024-12-26 11:27:18580semak imbas

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 "{}"
}

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\"}"
}

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\"}"
}

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!

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