在 Go 中处理 JSON Post 请求 [英] Handling JSON Post Request in Go

查看:59
本文介绍了在 Go 中处理 JSON Post 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有以下内容,这似乎令人难以置信,我一直在想,Go 有比这更好的设计库,但我找不到 Go 处理 JSON 数据的 POST 请求的示例.它们都是表单 POST.

So I have the following, which seems incredibly hacky, and I've been thinking to myself that Go has better designed libraries than this, but I can't find an example of Go handling a POST request of JSON data. They are all form POSTs.

这是一个示例请求: curl -X POST -d "{"test": "that"}" http://localhost:8082/test

这是代码,嵌入了日志:

And here is the code, with the logs embedded:

package main

import (
    "encoding/json"
    "log"
    "net/http"
)

type test_struct struct {
    Test string
}

func test(rw http.ResponseWriter, req *http.Request) {
    req.ParseForm()
    log.Println(req.Form)
    //LOG: map[{"test": "that"}:[]]
    var t test_struct
    for key, _ := range req.Form {
        log.Println(key)
        //LOG: {"test": "that"}
        err := json.Unmarshal([]byte(key), &t)
        if err != nil {
            log.Println(err.Error())
        }
    }
    log.Println(t.Test)
    //LOG: that
}

func main() {
    http.HandleFunc("/test", test)
    log.Fatal(http.ListenAndServe(":8082", nil))
}

一定有更好的方法,对吧?我只是难以找到最佳实践.

There's got to be a better way, right? I'm just stumped in finding what the best practice could be.

(Go 也被搜索引擎称为 Golang,在此提及以便其他人可以找到它.)

(Go is also known as Golang to the search engines, and mentioned here so others can find it.)

推荐答案

请使用 json.Decoder 而不是 json.Unmarshal.

func test(rw http.ResponseWriter, req *http.Request) {
    decoder := json.NewDecoder(req.Body)
    var t test_struct
    err := decoder.Decode(&t)
    if err != nil {
        panic(err)
    }
    log.Println(t.Test)
}

这篇关于在 Go 中处理 JSON Post 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆