如何将 JSON 解组为包含 2 个字段(UserName和Name)的结构,其中包含相同的 JSON 标记名称(name)?package mainimport ( "encoding/json" "fmt")type User struct { UserName string `json:"name,omitempty"` Name string `json:"name,omitempty"`}func main() { data := []byte(` { "name":"kishore" } `) user := &User{} err := json.Unmarshal(data, &user) if err != nil { panic(err) } fmt.Printf("value of user : %+v\n", user)}实际输出: value of user : &{UserName: Name:}预期输出: value of user : &{UserName:kishore Name:kishore}如何获得UserNameandName字段填充kishore?当我查看Json的源代码时,我发现如果 2 个顶级字段具有相同的标签名称,它们就会丢弃。但是代码中的这条评论让我想到是否有办法标记两者either both tagged or neither taggedfunc dominantField(fields []field) (field, bool) { // The fields are sorted in increasing index-length order, then by presence of tag. // That means that the first field is the dominant one. We need only check // for error cases: two fields at top level, either both tagged or neither tagged. if len(fields) > 1 && len(fields[0].index) == len(fields[1].index) && fields[0].tag == fields[1].tag { return field{}, false } return fields[0], true}游乐场链接: https: //play.golang.org/p/TN9IQ8lFR6a
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
这实际上是重复结构标签导致 unmarshaller 忽略它的情况。根据官方文档-“3)否则有多个字段,所有字段都被忽略;不会发生错误。”
https://golang.org/pkg/encoding/json/
你可能应该做的是“去检查”,看看你的代码是否有这样的问题。
神不在的星期二
TA贡献1963条经验 获得超6个赞
type User struct {
UserName string `json:"name,omitempty"`
Name string `json:"-"`
}
func (u *User) UnmarshalJSON(data []byte) error {
type U User
if err := json.Unmarshal(data, (*U)(u)); err != nil {
return err
}
u.Name = u.UserName
return nil
}
https://play.golang.org/p/PRuigiBfwWv
- 2 回答
- 0 关注
- 514 浏览
添加回答
举报
0/150
提交
取消
