鉴于以下代码: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 对此答案的评论,以很好地解释原因。
- 2 回答
- 0 关注
- 196 浏览
添加回答
举报
0/150
提交
取消