将第二级响应主体解码为struct

时间:2017-10-16 19:23:44

标签: go

我有2个结构:

type List struct {
    ListID string `json:"listid"`
    Name string `json:"name"`
    Users []User `json:"users"`
}

type User struct {
    Email string `json:"email"`
    Name string `json:"name"`
}

我正在调用端点并成功获得具有以下结构的响应:

{
 "Results":[
  {"Email": "user1@domain.com", "Name": "test1" "State": "Active",…},
  {"Email": "user2@domain.com", "Name": "test2" "State": "Active",…},
  {"Email": "user3@domain.com", "Name": "test3", "State": "Active",…}
 ],
 "SomeOtherStuff": "email"
}

我正在尝试将JSON响应解码为我的结构,如下所示:

err = json.NewDecoder(response.Body).Decode(&list.Users)

但我的struct中没有“Results”属性可以映射到。如何只将响应的结果键映射到我的用户结构数组?

1 个答案:

答案 0 :(得分:2)

要获取数据,至少有两个选项:

解码为map [string] interface {}

m := create(map[string]interface{})
err = json.NewDecoder(response.Body).Decode(&m)

然后使用m [“结果”]键来吸引用户。

或者您可以解码为容器结构然后分配list.Users = container.Results。

type Container struct {
    Results []User `json:"Results"`
    SomeOtherStuff string `json:"SomeOtherStuff"`
}

要了解任意json的结构,请查看json2go