You need to enable JavaScript to run this app. Go语言如何在HTTP请求中发送含不同JSON对象的JSON数组
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何在HTTP请求中发送含不同JSON对象的JSON数组

Go 语言实现指定格式HTTP请求发送的方法

核心目标对齐

首先要完全匹配给出的curl行为:

  • 最终发送的表单参数为data,参数值是一个JSON数组,数组内包含两个独立单键对象:第一个对象键为id、值为你持有的id字符串;第二个对象键为name、值为你持有的name字符串,结构示例为[{"id":"ab1"},{"name":"Mash"}]
  • 该表单参数需要经过URL编码,以application/x-www-form-urlencoded格式作为请求体发送。

分步实现逻辑

1. 构建符合要求的JSON数组

不要手动拼接JSON字符串,使用Go标准库encoding/json完成序列化,避免特殊字符导致的格式错误:

import "encoding/json"
// 你持有的两个独立值
idVal := "ab1"
nameVal := "Mash"
// 按目标结构组装数组元素,每个元素是独立的单键对象
payloadItems := []map[string]string{
	{"id": idVal},
	{"name": nameVal},
}
// 序列化为标准JSON字符串
jsonContent, err := json.Marshal(payloadItems)
if err != nil {
	// 自行处理序列化错误,比如打印日志、中断流程
	panic(err)
}
// 此时jsonContent的内容就是目标格式的`[{"id":"ab1"},{"name":"Mash"}]`

2. 匹配curl的urlencode表单格式

使用Go标准库net/url处理表单参数编码,和curl的--data-urlencode逻辑完全等价:

import "net/url"
// 构建表单键值对
form := url.Values{}
form.Set("data", string(jsonContent))
// 编码生成最终的请求体内容
encodedReqBody := form.Encode()

3. 发起HTTP请求

设置和curl默认行为一致的请求头,发送请求:

import (
	"net/http"
	"strings"
)
// 替换为你的实际目标接口
targetURL := "https://your-target-endpoint.com"
// 构造请求
req, err := http.NewRequest(http.MethodPost, targetURL, strings.NewReader(encodedReqBody))
if err != nil {
	panic(err)
}
// 设置匹配的Content-Type,和curl发送表单的默认头一致
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// 执行请求
resp, err := http.DefaultClient.Do(req)
if err != nil {
	panic(err)
}
defer resp.Body.Close()

常见踩坑提示

  • 禁止手动用格式化字符串拼接JSON,一旦id或name值中包含双引号、反斜杠、控制字符,生成的JSON就会格式非法,导致服务端解析失败。
  • 不要直接把序列化好的JSON作为原始请求体发送,这和curl中--data-urlencode的行为完全不一致:curl的该参数本质是发送编码后的表单数据,不是未编码的原始JSON。
  • 可通过打印encodedReqBody的内容,和curl加-v参数抓取的实际发送内容做比对,二者完全一致即说明实现正确。

内容的提问来源于stack exchange,提问作者Hash934

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.15 00:24:04