Home >Backend Development >Golang >Why Does My Go Struct Produce an Empty JSON Object When Marshalling?
JSON Marshalling in Go: Case Sensitivity of Struct Fields
When attempting to generate JSON from a struct in Go, one may encounter unexpected results if the fields of the struct begin with lowercase characters. Consider the following struct:
type Machine struct { m_ip string m_type string m_serial string }
Marshalling this struct to JSON will result in an empty JSON object {}. This is because, by convention, Go uses the case of an identifier to determine its visibility within a package. By beginning the field names with lowercase characters, they are marked as private and inaccessible to the json.Marshal function.
To resolve this issue, one can either make the field names public by capitalizing the first letter of each word:
type Machine struct { MachIp string MachType string MachSerial string }
Or, if one wishes to use lowercase field names in the JSON output, they can use tags to specify the desired JSON names:
type Machine struct { MachIp string `json:"m_ip"` MachType string `json:"m_type"` MachSerial string `json:"m_serial"` }
By using tags, one can customize the JSON field names while maintaining the privacy of the struct fields in Go.
The above is the detailed content of Why Does My Go Struct Produce an Empty JSON Object When Marshalling?. For more information, please follow other related articles on the PHP Chinese website!