json - 在golang http.NewRequest的payload中提交变量
问题描述
我正在学习 Golang,所以请原谅这似乎是一个基本问题。我已经搜索了几个小时,以寻找有关如何从我的 golang 应用程序以 JSON 格式的 API POST 发送可变数据的线索,但尚未找到线索或解决方案。我知道答案将是我缺乏语法知识。
所以问题出在我试图发布的“lastcontact”字段上。我想使用包含当前日期时间的“dt”变量。
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
"time"
)
func main() {
dt := time.Now()
url := "https://fakeapi.io/API/apiActions/update/"
method := "POST"
payload := strings.NewReader(`{
"name" : "Dumpty",
"saveconfig" : "true",
"lastcontact" : {dt}
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("api-key", "gjhgjhgjhg")
req.Header.Add("api-secret", "jhgjhgjhg")
req.Header.Add("Content-Type", "application/json; charset=UTF-8")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
解决方案
如果您事先知道这些字段,则可以使用结构来存储您的响应类型。如果你不这样做,你可以使用 amap[string]interface{}
来存储任意数据。
然后使用json.Marshal
将其转换为格式正确的 JSON 响应。
type myStruct struct {
Name string `json:"name"`
SaveConfig string `json:"saveconfig"`
LastContact time.Time `json:"lastcontact"`
}
dt := time.Now()
myData := myStruct{
Name: "Dumpty",
SaveConfig: "true",
LastContact: dt,
}
myBytes, err := json.Marshal(myData)
// bytes.NewBuffer returns *bytes.Buffer
// which implements the io.Reader interface
// that you need for your http.NewRequest call
payload := bytes.NewBuffer(myBytes)
推荐阅读
- node.js - 有没有办法使用 Node.js 在网站上填写用户名和密码?
- node.js - 使用 Firebase Cloud Functions 将文件上传到 Firebase 存储时出错
- bash - Conda 在 VS Code 中打开新 shell 时激活上次创建的环境
- swift - SKScene 可视大小小于视图边界
- c - 为什么 C 预处理器会插入一个额外的空格?
- python - 将 matplotlib artist.get_visible 值存储在列表中
- javascript - 具有昂贵异步功能的 JS array.map
- amazon-web-services - 了解 boto3 的 put_record 文档
- html - 使用类选择器和带有元素的类有什么区别?
- python - 如何从 json 对象中提取/过滤具有特定值的整行?