为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:嵌套 JSON Unmarshaler 有问题

Golang:嵌套 JSON Unmarshaler 有问题

Go
慕标5832272 2021-07-03 00:15:37
鉴于以下代码:package mainimport (    "encoding/json"    "log")type Somefin stringfunc (s *Somefin) UnmarshalJSON(b []byte) error {    log.Println("Unmarshaling",string(b))    *s = Somefin("~"+string(b)+"~")    return nil}type Wat struct {    A, B string    *Somefin}func main() {    b := []byte(`{"A":"foo","B":"bar","Somefin":"baz"}`)    w := &Wat{Somefin: new(Somefin)}    err := json.Unmarshal(b,w)    log.Println(w, err)}我得到以下输出:# go run wat.go2013/12/14 13:59:17 Unmarshaling {"A":"foo","B":"bar","Somefin":"baz"}2013/12/14 13:59:17 &{  <nil>} <nil>所以Somefin关键是出于某种原因试图解组整个结构,而不仅仅是它应该解组的键。我这样做是错误的还是 json 编码器中的错误?这是 1.2,顺便说一句。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我想通了。


如果你有这样的结构定义:


type Wat struct {

    A, B string

    Somefin

}

然后我在 OP 中描述的错误发生了。但如果你这样做:


type Wat struct {

    A, B string

    Somefin Somefin

}

那么它没有。查看 Chris 对此答案的评论,以很好地解释原因。


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信