首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Go中处理JSON Post请求

在Go中处理JSON Post请求
EN

Stack Overflow用户
提问于 2013-03-28 09:16:07
回答 4查看 305.6K关注 0票数 296

因此,我有以下内容,这看起来令人难以置信,我一直在想,Go有比这个更好的设计库,但我找不到一个Go处理JSON数据的POST请求的示例。它们都是表单帖子。

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

下面是代码,其中嵌入了日志:

代码语言:javascript
复制
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,这里提到它是为了让其他人也能找到它。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-28 23:11:53

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

代码语言:javascript
复制
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)
}
票数 439
EN

Stack Overflow用户

发布于 2013-03-28 09:24:29

你需要从req.Body中读取。ParseForm方法从req.Body中读取数据,然后以标准的HTTP编码格式进行解析。您想要的是读取正文并以JSON格式解析它。

这是更新的代码。

代码语言:javascript
复制
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))
}
票数 95
EN

Stack Overflow用户

发布于 2020-01-22 07:59:04

代码语言:javascript
复制
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)
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15672556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档