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
Libérer: 2024-12-26 11:27:18
original
585 Les gens l'ont consulté

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 "{}"
}
Copier après la connexion

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\"}"
}
Copier après la connexion

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\"}"
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal