当前位置: 首页 > 工具软件 > Go Curl > 使用案例 >

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

羊舌涵涤
2023-12-01

需求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

     }

}

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

 类似资料: