You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go构造HTTP POST请求JSON值时出现JSON无效错误如何解决

错误原因

  • 手动拼接JSON存在格式隐患:如果variable1、variable2是字符串类型,你没有给它们包裹双引号,拼接后会出现"variable1": xxx的非法JSON格式;如果变量值包含双引号、转义字符、换行等特殊字符,会直接破坏整个JSON结构。
  • 变量名匹配错误:你定义的JSON字符串变量是dataString,但传给http.NewRequest的请求体是finalDataString,两者不是同一个变量,导致实际提交的内容根本不是你构造的JSON,自然格式无效。

正确实现方案

不要手动拼接JSON,直接使用Go标准库encoding/json做序列化,自动处理所有格式转义问题,示例代码:

import "encoding/json"

// 先定义和JSON字段匹配的结构体
type PostData struct {
    CredentialsID string `json:"credentials_id"`
    UserID        string `json:"user_id"`
    Variable1     string `json:"variable1"` // 变量类型可根据实际需求调整为int等其他类型
    Variable2     string `json:"variable2"`
}

// 实例化结构体赋值
data := PostData{
    CredentialsID: "12345",
    UserID:        "12",
    Variable1:     variable1,
    Variable2:     variable2,
}

// 序列化得到合法JSON字节数组
jsonData, err := json.Marshal(data)
if err != nil {
    log.Printf("JSON序列化失败: %v", err)
    os.Exit(1)
}

// 构造请求时直接传jsonData
req, err = http.NewRequest("POST", "https://api-call-url/bla", bytes.NewReader(jsonData))
// 后续请求头设置、请求执行逻辑保持不变即可

验证小技巧

如果还是遇到JSON格式问题,可以把构造的请求体内容打印出来,粘贴到JSON校验工具里检查具体错误位置,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:57:02