如何在结构的键中使用连字符解组 json 字符串?

atl*_*ine 2 json struct go

我有以下代码没问题,它会打印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同名的成员,当然需要使其大写。所以我尝试更改line2User-Name string,但-go变量名中无效。我该怎么办?

icz*_*cza 5

只需使用struct 标签将 struct 字段映射到 JSON 属性:

type User struct {
    UserName string `json:"user-Name"`
    Age      int
}
Run Code Online (Sandbox Code Playgroud)

有了它,它就可以工作了,在Go Playground上试试吧。