猿问

Golang:嵌套 JSON Unmarshaler 有问题

鉴于以下代码:


package main


import (

    "encoding/json"

    "log"

)


type Somefin string


func (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.go

2013/12/14 13:59:17 Unmarshaling {"A":"foo","B":"bar","Somefin":"baz"}

2013/12/14 13:59:17 &{  <nil>} <nil>

所以Somefin关键是出于某种原因试图解组整个结构,而不仅仅是它应该解组的键。我这样做是错误的还是 json 编码器中的错误?这是 1.2,顺便说一句。


慕标5832272
浏览 197回答 2
2回答

烙印99

我想通了。如果你有这样的结构定义:type Wat struct {&nbsp; &nbsp; A, B string&nbsp; &nbsp; Somefin}然后我在 OP 中描述的错误发生了。但如果你这样做:type Wat struct {&nbsp; &nbsp; A, B string&nbsp; &nbsp; Somefin Somefin}那么它没有。查看 Chris 对此答案的评论,以很好地解释原因。
随时随地看视频慕课网APP

相关分类

Go
我要回答