Maison >développement back-end >Golang >Pourquoi l'encodage JSON échoue-t-il avec les structures Go ayant des noms de champs en minuscules ?

Pourquoi l'encodage JSON échoue-t-il avec les structures Go ayant des noms de champs en minuscules ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-26 11:27:18654parcourir

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

Pourquoi l'encodage JSON échoue-t-il pour les structures avec des noms de champs en minuscules dans Go ?

Dans Go, les champs d'une structure ne sont visibles que par le package dans lequel il est défini si leur première lettre est en majuscule. Tenter d'encoder une structure avec des noms de champs en minuscules, comme indiqué ci-dessous, entraînera une sortie JSON vide :

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

Cela se produit car les champs ne sont pas visibles par la fonction json.Marshal en raison de leur première minuscule. courrier. Cependant, changer les noms de champs en majuscules, comme suit, permet à l'encodage JSON de réussir :

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

Pour encoder une structure avec des noms de champs en minuscules, vous pouvez baliser les champs avec les clés JSON souhaitées. Par exemple :

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

En marquant les champs avec les clés JSON souhaitées, la structure peut être codée avec des noms de champs en minuscules, ce qui la rend plus pratique pour certains scénarios.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn