猿问

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

package main


import (

    "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

我如何获得密钥及其值


大话西游666
浏览 68回答 1
1回答

UYOU

您可以通过对 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.TyperequestURL = request.URLfor key, value := range request.Params {    switch v := value.(type) {    case float64:         // handle numbers    case string:         // handle strings    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答