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!