繁体   English   中英

如何解析JSON发布请求

[英]How to parse json post request

我想将json数据发布到Go api,但是我无法在Go中解析json

JavaScript代码:

data= {"user":{"username":"admin","password":"123"},"profile":{"firstname":"morteza","lastname":"khadem","files":["/temp/a.jpg","/temp/b.jpg"]}}

$.post('/parse-json', data, function () {
    alert('success');
});

在php中获取数据非常简单($ _REQUEST ['user'] ['firstname']),但在Go中则有所不同

GO与PHP和JS不同。 除了易于使用之外,它的重点是明确和可靠。

为了解析请求中的JSON主体,我们应该具有强大的类型struct定义来描述接收有效负载的结构。 这就是我们可以控制应支持的字段的方式。 这很重要,因为每个文件都有其自己的类型,并且如果请求中的字符串与该类型不匹配,解析将失败。

type RequestBody struct {
    User   User  `json:"user"`
    Profile Profile `json:"profile"`
}

type User struct {
    UserName   string  `json:"username"`
    Password string `json:"password"`
}

type Profile struct {
    FirstName   string  `json:"firstname"`
    LastName string `json:"lastname"`
    Files []string `json:"files"`
}


func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    decoder := json.NewDecoder(r.Body)
    var req RequestBody
    err := decoder.Decode(&req)
    if err != nil {
        // log error and return 400 to caller
        return
    }

    // Use req
}

现在我使用此代码:

type Merchant struct{}

func (*Merchant) Register(context context.Context){
    type registerRequestData struct{
        Merchant models.MrtMerchant `json:"merchant"`
        User models2.UsrUser `json:"user"`
        Profile models2.UsrUserProfile `json:"profile"`
        Branch models.MrtMerchantBranch `json:"branch"`
    }
    var request registerRequestData
    if err:=context.ReadJSON(&request);err!=nil{
        panic(err)
    }

    fmt.Printf("%+v\n",request)
}

如果使用虹膜框架,则可以使用ReadJSON函数,如下所示:

func serve(context context.Context){
    var request map[string]interface{}
    context.ReadJSON(request)
    username:=request["user"].(map[string]string)["username"]
    fmt.Println(username)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM