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

Go语言中如何通过字符串插值动态构建JSON数据包?

在Go中动态生成JSON的正确方式

你直接在字符串字面量里用{{ NAME }}这种模板语法的写法在Go里是跑不通的,Go原生字符串不支持这种插值,这么写会直接报语法错误。下面给两种靠谱的实现方式:

方法一:使用text/template模板包

Go标准库的text/template可以实现字符串模板插值,适合需要自定义JSON结构模板的场景:

package main

import (
    "bytes"
    "text/template"
)

func main() {
    name := "John Doe"
    occupation := "gardener"

    // 定义JSON模板,注意变量要用{{ .Name }}这种格式
    jsonTemplate := `{
        "Id": 1,
        "Name": "{{ .Name }}",
        "Occupation": "{{ .Occupation }}"
    }`

    // 创建模板并解析
    tpl, err := template.New("json").Parse(jsonTemplate)
    if err != nil {
        panic(err)
    }

    // 准备模板数据
    data := struct {
        Name       string
        Occupation string
    }{
        Name:       name,
        Occupation: occupation,
    }

    // 执行模板,输出到缓冲区
    var buf bytes.Buffer
    err = tpl.Execute(&buf, data)
    if err != nil {
        panic(err)
    }

    // 转成[]byte,就是最终的JSON数据
    jsonData := buf.Bytes()
}

方法二:使用encoding/json序列化结构体(推荐)

这种方式更安全,能自动处理JSON语法转义,避免手动拼接可能出现的错误,是Go生成JSON的常规做法:

package main

import (
    "encoding/json"
)

func main() {
    // 定义对应JSON结构的结构体,字段标签指定JSON键名
    type Person struct {
        Id         int    `json:"Id"`
        Name       string `json:"Name"`
        Occupation string `json:"Occupation"`
    }

    // 实例化结构体,填充动态数据
    person := Person{
        Id:         1,
        Name:       "John Doe",
        Occupation: "gardener",
    }

    // 序列化成JSON字节数组
    jsonData, err := json.MarshalIndent(person, "", "    ")
    if err != nil {
        panic(err)
    }
}

json.MarshalIndent会生成带缩进的格式化JSON,如果不需要格式化,用json.Marshal即可。

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21