因此,我有以下内容,这看起来令人难以置信,我一直在想,Go有比这个更好的设计库,但我找不到一个Go处理JSON数据的POST请求的示例。它们都是表单帖子。
下面是一个示例请求:curl -X POST -d "{\"test\": \"that\"}" http://localhost:8082/test
下面是代码,其中嵌入了日志:
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))
}
一定有更好的办法,对吧?我只是在寻找最佳实践时遇到了困难。
(Go在搜索引擎中也被称为Golang,这里提到它是为了让其他人也能找到它。)
发布于 2013-03-28 23:11:53
请使用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)
}
发布于 2013-03-28 09:24:29
你需要从req.Body
中读取。ParseForm
方法从req.Body
中读取数据,然后以标准的HTTP编码格式进行解析。您想要的是读取正文并以JSON格式解析它。
这是更新的代码。
package main
import (
"encoding/json"
"log"
"net/http"
"io/ioutil"
)
type test_struct struct {
Test string
}
func test(rw http.ResponseWriter, req *http.Request) {
body, err := ioutil.ReadAll(req.Body)
if err != nil {
panic(err)
}
log.Println(string(body))
var t test_struct
err = json.Unmarshal(body, &t)
if err != nil {
panic(err)
}
log.Println(t.Test)
}
func main() {
http.HandleFunc("/test", test)
log.Fatal(http.ListenAndServe(":8082", nil))
}
发布于 2020-01-22 07:59:04
type test struct {
Test string `json:"test"`
}
func test(w http.ResponseWriter, req *http.Request) {
var t test_struct
body, _ := ioutil.ReadAll(req.Body)
json.Unmarshal(body, &t)
fmt.Println(t)
}
https://stackoverflow.com/questions/15672556
复制相似问题