我的JSON看起来像这样:
{
"website": {
"id": 8,
"account_id": 9,
"name": "max",
"website_url": "",
"subscription_status": "trial",
"created_at": "2016-01-24T01:43:41.693Z",
"updated_at": "2016-02-21T01:17:53.129Z",
}
}
我的网站结构如下:
type Website struct {
Id int64 `json:"id"`
AccountId int64 `json:"account_id"`
Name string `json:"name"`
WebsiteUrl string `json:"website_url"`
SubscriptionStatus string `json:"subscription_status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
然后我有一个公司结构:
type Company struct {
Website Website
api *API
}
所以在我的API客户端代码中我有这个:
res, status, err := api.request(endpoint, "GET", nil, nil)
if err != nil {
return nil, err
}
if status != 200 {
return nil, fmt.Errorf("Status returned: %d", status)
}
r := map[string]Company{}
err = json.NewDecoder(res).Decode(&r)
fmt.Printf("things are: %v\n\n", r)
我得到的输出是:
things are: map[website:{{0 0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC} <nil>}]
我如何调试这个,我不确定为什么它没有使用正确的值设置Website结构。
更新
我添加了这个,我没有看到任何输出:
if err != nil {
fmt.Printf("error is not nillllllll!!!:")
fmt.Println(err)
return nil, err
}
答案 0 :(得分:2)
这是因为您使用class A {
int aVal;
public:
A(int);
};
A::A(int aVal)
{
this->aVal = aVal;
}
class B : public A {
int bVal;
public:
B(int, int)
};
B::B(int aVal, int bVal) : A(aVal)
{
this->bVal = bVal;
}
&gt;设置了太多级别的嵌套map
&gt; Company
。 Website
在其上有效地构建了另一个层,因此它期望嵌套三个级别的JavaScript对象。实际上,您提供的JSON只有两个map
&gt; Company
。
所以有几种方法可以让它发挥作用;选择最适合你的那个。
你可以这样做:
Website
或者你可以这样做:
r := map[string]Website{}
json.NewDecoder(res).Decode(&r)