Go net/http获取body中json格式数据
package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" ) type AutotaskRequest struct { RequestID string `json:"requestid"` Clone CloneModel `json:"clone"` Push PushModel `json:"push"` } type CloneModel struct { //TODO //"Method": string `json:"ceph"` RequestID string `json:"requestid"` CallbackURL string `json:"callbackurl"` } type PushModel struct { RequestID string `json:"requestiD"` CallbackURL string `json:"callbackuRL"` IP string `json:"remoteip"` Port int `json:"remoteport"` User string `json:"user"` } func test(w http.ResponseWriter, r *http.Request) { // r.ParseForm() defer fmt.Fprintf(w, "ok\n") fmt.Println("method:", r.Method) body, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Printf("read body err, %v\n", err) return } println("json:", string(body)) var a AutotaskRequest if err = json.Unmarshal(body, &a); err != nil { fmt.Printf("Unmarshal err, %v\n", err) return } fmt.Printf("%+v", a) } func main() { http.HandleFunc("/test", test) http.ListenAndServe(":8888", nil) }
客户端所传递参数如下:
{ "requestid": "xxxxx", "clone": { "method": "ceph", "callbackurl": "xxx", "remoteip": "192.168.2.1", "remoteport": 8080, "user": "xxx", "pass": "xxx", "path": "xxx", "filename": "xxx" }, "optimize": { "callbackurl": "xxx", "filter": { "k1": true, "k2": false }, "trim": true, "progressive": true, "quality": 100, "colorNum": 256, "gifOptLevel": 2, "svgo": true, "guetzli": false, "css_rewrite": false, "js_rewrite": false }, "push": { "method": "ceph", "callbackurl": "xxx", "remoteip": "192.168.2.1", "remoteport": 8080, "user": "xxx", "pass": "xxx", "path": "xxx", "filename": "xxx" } }
json传递的参数中,服务端有的没有对应字段