fprintf格式Gonethttp获取body中json格式数据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传递的参数中,服务端有的没有对应字段