在Golang中,使用json.Marshal将go的结构体转换为JSON格式的字节数组时,JSON中字段名的首字母大小写会影响到转换结果。
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
person := Person{"Tom", 25}
b, err := json.Marshal(person)上述代码中,Person结构体中的Name和Age字段在定义时使用了`json:"name"`和`json:"age"`,这表示将Go语言中的字段名转换为JSON中的字段名时,使用小写转换。
当我们将person转换为JSON字节数组时,得到的结果为:
{"name":"Tom","age":25}我们注意到,JSON中的字段名都是小写字母开头的。这是因为在Person结构体中,字段的json tag指定了将Go语言中的字段名转换为JSON中的字段名时使用小写字母。
如果我们不添加`json` tag,会得到不同的结果:
type Person struct {
Name string
Age int
}
person := Person{"Tom", 25}
b, err := json.Marshal(person)转换结果为:
{"Name":"Tom","Age":25}可以看到,JSON中字段名的首字母采用了大写字母。这是因为在Go语言中,导出的字段名(首字母大写)可以被其他包访问,而未导出的字段名(首字母小写)则只能在本包内使用,因此在采用默认的转换方式时,字母大写的字段名会被转换为JSON中首字母为大写的字段名。
综上所述,Golang中的JSON大小写转换规则,需要我们在struct定义中添加json tag,指定转换方式。如果没有添加json tag,则会采用默认的转换方式。