为了账号安全,请及时绑定邮箱和手机立即绑定

如何发送动态 json 键/值作为请求参数

如何发送动态 json 键/值作为请求参数

Go
大话西游666 2023-03-29 17:14:37
package mainimport (    "strings"    "net/http"    "encoding/json"    "fmt")func main() {    j := `{"url":"http://localhost/test/take-request", "params":{"name":"John","age":"20"},"type":"get"}`    // k := `{"url":"http://localhost/test/take-request", "params":{"gender":"m","a":"20"},"type":"post"}`    request := map[string]interface{}{}    err := json.Unmarshal([]byte(j), &request)    if err != nil {        panic(err)    }    fmt.Println(request)    requestType = strings.ToUpper(request["type"]);    requestUrl = request["url"];    fmt.Println(request["params"])    // how do i get the keys and their values from params.    // note params is dynamic.    for _, v := range request["params"].(map[string]interface{}) {        // println(v)        switch t := v.(type) {        case string, []int:            fmt.Println(t)        default:            fmt.Println("wrong type")        }    }    sendRequest(requestType, requestUrl)}func sendRequest(type string, url string) string {    req, err := http.NewRequest(type, url, nil)    client := &http.Client{}    resp, err := client.Do(req)    if err != nil {        panic(err)    }    defer resp.Body.Close()    body, _ := ioutil.ReadAll(resp.Body)    fmt.Println("response Body:", string(body))    return string(body)}我如何遍历参数是interface我如何获得密钥及其值
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您可以通过对 JSON 解组使用适当的结构来极大地简化代码:


type Request struct {

    URL    string                 `json:"url"`

    Params map[string]interface{} `json:"params"`

    Type   string                 `json:"type"`

}

然后你可以更简单地解组它:


request := &Request{}

if err := json.Unmarshal([]byte(j), &request); err != nil {

    panic(err)

}

并访问这样的值:


requestType = request.Type

requestURL = request.URL

for key, value := range request.Params {

    switch v := value.(type) {

    case float64:

         // handle numbers

    case string:

         // handle strings

    }

}


查看完整回答
反对 回复 2023-03-29
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信