golang json 获取所有key_请教如何获取这个api的全部数据?

现在有一个api返回的数据是分页返回,需要分页调用来获取全部数据并保存下来,但是接口的返回json格式比较混乱,新手不太会写,求教。

json返回格式大概类似如下结构:

{

"code": 0,

"msg": "",

"data": {

"0": {

"id": 1,

"state": "2",

"ip": "192.168.0.1",

"date": "2018-04-16 19:37:15"

},

"1": {

"id": 2,

"state": "2",

"ip": "192.168.0.2",

"date": "2018-04-16 19:37:16"

},

"meta": {

"pagination": {

"total": 46,

"per_page": 2,

"current_page": 1,

"total_pages": 23,

"links": {

"next": "/?limit=2&page=1"

}

}

}

}

}

我现在的代码大概思路如下(没法正确运行)

type RespStruct struct {

Code int `json:"code"`

Msg string `json:"msg"`

Data map[string]interface{} `json:"data"`

}

func request(page int, limit int) {

resp := RespStruct{}

api, _ := url.Parse("http://localhost:8080/api/test")

query := api.Query()

query.Set("page", strconv.Itoa(page))

query.Set("limit", strconv.Itoa(limit))

api.RawQuery = query.Encode()

response, err := http.Get(api.String())

if err != nil {

log.Error(err)

return

}

defer response.Body.Close()

body, err := ioutil.ReadAll(response.Body)

if err != nil {

log.Error(err)

return

}

json.Unmarshal([]byte(body), &resp)

if resp.Code != 0 {

return

} else {

for k, v := range resp.Data {

// 以下不知如何写了,伪代码如下

if k == "meta" {

if v["pagination"]["current_page"] >= v[pagination]["total_page"] {

break

} else {

request(page+1, limit)

}

} else {

saveItemInDB(v)

}

}

}

}

在根据分页信息判断是否继续请求的时候 不知道怎么拿分页信息。然后在保存的时候也没法直接去v里面的值。求指点


版权声明:本文为weixin_35760923原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。