Golang json解码在Array上失败

时间:2016-11-29 18:51:15

标签: json go

我有一个像这样的对象:

   a = [{
        "name": "rdj",
        "place": "meh",
        "meh" : ["bow", "blah"]
    }]

我定义了一个结构:

type first struct {
    A []one
}

type one struct {
    Place string `json: "place"`
    Name string `json: "name"`
}

当我在代码中使用相同的内容时:

func main() {
    res, _ := http.Get("http://127.0.0.1:8080/sample/")
    defer res.Body.Close()
    var some first
    rd := json.NewDecoder(res.Body)
    err := rd.Decode(&some)
    errorme(err)
    fmt.Printf("%+v\n", some)
}

我收到以下错误:

panic: json: cannot unmarshal array into Go value of type main.first

我的理解是:

type first定义数组,在该数组中是type one中定义的数据结构。

2 个答案:

答案 0 :(得分:2)

JSON是一个对象数组。使用以下类型:

type one struct {   // Use struct for JSON object
  Place string `json: "place"`
  Name string `json: "name"`
}

...

var some []one   // Use slice for JSON array
rd := json.NewDecoder(res.Body)
err := rd.Decode(&some)

问题中的类型与此JSON结构匹配:

{"A": [{
    "name": "rdj",
    "place": "meh",
    "meh" : ["bow", "blah"]
}]}

答案 1 :(得分:1)

@rickydj,

  1. 如果您需要将“first”作为单独的类型: type first []one

  2. 如果你不关心将“first”作为一个单独的类型,只需减少到 var some []one 正如@Mellow Marmot上面提到的那样。