猿问

如何解析json post请求

我想将 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 中不同


BIG阳
浏览 153回答 3
3回答

慕娘9325324

GO 不同于 PHP 和 JS。它不是易于使用,而是专注于明确和可靠。要在请求中解析 JSON 主体,我们应该有强类型结构定义来描述接收有效负载的结构。这就是我们如何控制应该支持的字段。这很重要,因为每个文件都有自己的类型,如果来自请求的字符串与该类型不匹配,解析将失败。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)}

隔江千里

如果使用 iris 框架,你可以像这样使用 ReadJSON 函数:func serve(context context.Context){    var request map[string]interface{}    context.ReadJSON(request)    username:=request["user"].(map[string]string)["username"]    fmt.Println(username)}
随时随地看视频慕课网APP

相关分类

Go
我要回答