如何为 POST 请求创建 json 有效负载?
Posted
技术标签:
【中文标题】如何为 POST 请求创建 json 有效负载?【英文标题】:How can I create a json payload for a POST request? 【发布时间】: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)) 这实际上有效,但静态有效负载。我只想让它充满活力。
【参考方案1】:
你也可以使用json#Encoder.Encode:
package main
import (
"bytes"
"encoding/json"
"net/http"
)
func main()
s, b := structMonth, Day int12, 31, new(bytes.Buffer)
json.NewEncoder(b).Encode(s)
r, err := http.NewRequest("POST", "https://***.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)
【讨论】:
以上是关于如何为 POST 请求创建 json 有效负载?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swagger 使用 json 作为有效负载的 post 请求创建 api
如何为不同的请求方法创建具有不同参数编码的 AFHttpClient?
Symfony:如何为与 Voryx REST Bundle 的一对多关系创建 POST 请求