【问题标题】:How can I create a json payload for a POST request?如何为 POST 请求创建 json 有效负载?
【发布时间】:2018-07-22 02:34:52
【问题描述】:
request, err := http.NewRequest("POST", url,bytes.NewBuffer(**myJsonPayload**))

我正在尝试使用动态“myJsonPayload”进行发布请求,该请求将针对不同的请求进行更改。

【问题讨论】:

  • 我尝试了以下方法:payload := []byte({ "abc":xyz, "test":"test", }) jsonPayload, _ := json.Marshal(payload) request, err := http.NewRequest("POST", url , bytes.NewBuffer(jsonPayload)) 这实际上有效,但静态有效负载。我只想让它充满活力。

标签: json http post go payload


【解决方案1】:

你也可以使用json#Encoder.Encode:

package main

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

func main() {
   s, b := struct{Month, Day int}{12, 31}, new(bytes.Buffer)
   json.NewEncoder(b).Encode(s)
   r, err := http.NewRequest("POST", "https://stackoverflow.com", b)
   if err != nil {
      panic(err)
   }
   new(http.Client).Do(r)
}

【讨论】:

    【解决方案2】:

    您还可以使用 map 来动态更改 json 有效负载。下面是执行此操作的示例代码。

    payload := map[string]interface{}{"id":1, "name":"zahid"}
    byts, _ := json.Marshal(payload)
    fmt.Println(string(byts)) // {"id":1,"name":"zahid"}
    

    【讨论】:

    • 这并没有错,但你永远不应该在 Marshal 方法中抑制错误。
    【解决方案3】:

    使用 Go 标准库的 Marshal in the encoding/json package 将您的数据编码为 JSON。

    签名:

    func Marshal(v interface{}) ([]byte, error)
    

    来自包文档的示例,其中输入数据恰好是具有 int、string 和 string 切片字段类型的结构类型:

    type ColorGroup struct {
        ID     int
        Name   string
        Colors []string
    }
    group := ColorGroup{
        ID:     1,
        Name:   "Reds",
        Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
    }
    b, err := json.Marshal(group)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2015-07-05
      • 1970-01-01
      相关资源
      最近更新 更多