【go】Curl返回数据处理问题

"该博客讲述了如何在Go语言中解析包含JSON数据的API响应,提取"data"字段,并进行遍历操作。示例代码展示了如何使用`curlGet`方法获取JSON数据,然后通过断言转换为`[]interface{}
摘要由CSDN通过智能技术生成

需求1:返回数据格式如下,但我们只需要返回data下面的数据;

{

        "data": [{

                "name": "zhangsan"

        }, {

                "name": "lisi"

        }]

}

示例代码

#test方法请求

func test(apiUrl) ([]interface{}, error) {

     resp, err := curlGet(apiUrl)

     if err != nil {

           if _, ok := resp["data"]; ok {

                  respData := resp["data"].([]interface{})

                  return respData, nil

           }    

     } else {

           return nil, err

     }

}

#curl方法定义

func curlGet(apiUrl) gin.H {

        client := http.Client{}

        resp, err := client.Get(apiUrl)

        if err != nil {

               return nil, err

        }

        defer resp.Body.Close()

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

        if err != nil {

                return nil, err

        }

        fmt.Println("resp:", string(body))

        var respData gin.H

        if err := json.Unmarshal(body, &respData); err != nil {

                return nil, err

        }

        log.Printf("format: %v", respData)

        return respData, nil
}

此demo中,从json取得数据为map[string]interface{}类型,在test方法中,我们要求只返回data下数据,所以要给一个合适类型,定义过struct,效果不好,却忽略了最简单的类型   []interface

当然,如果你不需要做这么复杂,整体返回就ok了,那可以忽略。

=========================================================================

需求二:获取json中的数据,并进行操作。

{

        "data": [{

                "name": "zhangsan"

        }, {

                "name": "lisi"

        }]

}

此处的curl定义就不再赘述。

#test方法请求

func test(apiUrl) error {

     resp, err := curlGet(apiUrl)

     if err != nil {

           if _, ok := resp["data"]; ok {

                  respData := resp["data"].([]struct{

                        Name string `json:"name"`

                  })

                  for item, key := range respData {

                        fmt.Println(”key = ", key, " => name = ", item.Name)

                  }

           }    

     } else {

           return nil, err

     }

}

其他情况,遇到了再说,当然需求二也可以用遍历去实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值