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
}
}
- 1 回答
- 0 关注
- 67 浏览
添加回答
举报
0/150
提交
取消