package main
import (
"fmt"
"net/http"
"encoding/json"
"bytes"
)
//需要编码的参数
parameter := map[string]string{"id": 123456}
//利用encoding/json包进行编码
jsonstr, err := json.Marshal(parameter)
if err != nil {
fmt.Println("json encode err", err)
}
//将json编码后的字节流初始化一个字节 buffer
body := bytes.NewBuffer([]byte(jsonstr))
//利用Http.POST进行与服务器交互
resp, err := http.Post("http://www.baidu.com", "application/json", body)
if err != nil {
fmt.Println(err)
return nil, err
}
defer resp.Body.Close()
//方法一:直接对resp响应消息的body进行解析操作
respbody := make(map[string]interface{})
//对返回的结果response进行json解码,可以利用map[string]interface{} 通用的格式存放解码后的值,或者使用具体的response的返回的信息,构建一个结构体,来存放解析后的返回值
err = json.NewDecoder(resp.Body).Decode(&respbody)
if err != nil {
fmt.Println(err)
return
}
//方法二: 对resp响应消息的body进行转换成字节流后进行处理:
resflow, err := ioutil.ReadAll(resp.Body)
bReader := bytes.NewReader(resflow)
respbody := make(map[string]interface{})
err = json.NewDecoder(bReader).Decode(&respbody)
//resflow, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(respbody)
//end
validresult := make(map[string]string)
for k, v := range respbody {
switch element := v.(type) {
case int:
validresult[k] = strconv.Itoa(element)
case float64:
validresult[k] = strconv.FormatFloat(element, 'G', 30, 32)
case string:
validresult[k] = element
case map[string]interface{}:
for key, value := range element {
switch element1 := value.(type) {
case int:
validresult[key] = strconv.Itoa(element1)
case float64:
validresult[key] = strconv.FormatFloat(element1, 'G', 30, 32)
case string:
validresult[key] = element1
case nil:
validresult[key] = ""
}
}
default:
err = errors.New("switch match error")
return
}
}
fmt.Println(validresult)
return validresult, nil
有疑问加站长微信联系(非本文作者)