我有一个像这样的对象:
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
中定义的数据结构。
答案 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,
如果您需要将“first”作为单独的类型:
type first []one
如果你不关心将“first”作为一个单独的类型,只需减少到
var some []one
正如@Mellow Marmot上面提到的那样。