我正在编写一个 API 包装器,其中对 API 的调用返回一些数据的 json 响应,比方说:
{
group_id: 123,
group_name: "cool kids",
}
对于 url example.com/api/groups
然后您可以将 fields=members
附加到 url(类似于:example.com/api/groups?group_id=123&fields=members
)然后获取:
{
members: [...some data..]
}
请注意其他字段现在是如何丢失的...
好吧,我正在尝试使用单个 struct
,它看起来像:
type Club struct {
GroupId int `json:"group_id"`
GroupName string `json:"group_name"`
Members []struct {...} `json:"members"
}
结构如下所示:
type Committee struct {
GroupId string `json:"group_id"`
GroupName string `json:"group_name"`
Members []struct {
Person Person `json:"person"`
Rank float64 `json:"rank"`
Side string `json:"side"`
Title string `json:"title"`
} `json:"members"`
}
type Person struct {
id string `json:"id"`
name string `json:"name"`
age int `json:"age"`
}
func getGroup() Club {...}
func (c *Club) GetMembers() {...}
所以我使用 getGroup
进行了第一个解码调用,因此该结构具有 GroupId
和 GroupName
就好了,还有 Members
是空的,因为调用没有为它返回任何东西。
然后我调用 club.GetMembers()
来填充 Members
字段,以便填充整个结构,但它似乎并没有将其提取到结构,因为最后 Members
仍然是空的,GroupId
和 GroupName
的数据仍然存在。
我确定调用返回的是我所期望的,所以我认为 Unmarshal
不起作用,那么我该如何处理呢?这不在 Unmarshal
的功能范围内吗?
编辑 我只是将确切的代码推送到 github,仍然不确定。
这是 repo 协议(protocol):https://github.com/PeteJodo/gosun
这是使用上述 repo 的要点:https://gist.github.com/PeteJodo/d5335b9f66304148483b
主要关注的文件:
最佳答案
好吧,我的问题与 Unmarshal
无关。发生的事情是 API 响应返回:
{
results: [{
group_id: 123,
group_name: "cool kids"
}, ...],
...
}
...每个结果都是一个单独的组。我的问题是每个组都是它自己的结构,我有一个用于 Group
结构的方法,该方法将进行下一次调用以扩展其 Members
字段,我正在使用Group
结构作为 Unmarshal
的目标,而不是像 Results
这样的东西,它会为 API 响应正确构造,然后提取正确的 Group
及其 Members
字段
关于json - Golang JSON 解码多个调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351553/