Go net/http获取body中json格式数据
package mainimport ("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 AutotaskRequestif 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传递的参数中,服务端有的没有对应字段
Go net/http获取body中json格式数据
原文地址:http://www.cnblogs.com/pluse/p/7927768.html