我有以下代码没问题,它会打印Bob:
package main
import (
"encoding/json"
"fmt"
)
type User struct {
UserName string // line2
Age int
}
func main() {
var u User
str := `{"userName":"Bob", "age": 20}` // line1
json.Unmarshal([]byte(str), &u)
fmt.Println(u.UserName)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在实际情况下,line1接下来是 json 字符串,您可以看到键中有一个连字符( -)。
str := `{"user-Name":"Bob", "age": 20}`
Run Code Online (Sandbox Code Playgroud)
而且众所周知,要自动解组json字符串,我们必须在struct中定义一个与json字符串中的key同名的成员,当然需要使其大写。所以我尝试更改line2为User-Name string,但-在go变量名中无效。我该怎么办?
只需使用struct 标签将 struct 字段映射到 JSON 属性:
type User struct {
UserName string `json:"user-Name"`
Age int
}
Run Code Online (Sandbox Code Playgroud)
有了它,它就可以工作了,在Go Playground上试试吧。