如何为 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 请求

如何为 JSON 公开 REST 服务?

如何为POST,GET等多个Http请求创建单一逻辑应用程序

Django如何为多个表单创建一个帖子请求。