
go标准库提供encoding/json包中的json.marshal函数,可将map、slice等数据结构高效序列化为json字节流,用法简洁且类型安全,是php中json_encode()的直接对应实现。
go标准库提供encoding/json包中的json.marshal函数,可将map、slice等数据结构高效序列化为json字节流,用法简洁且类型安全,是php中json_encode()的直接对应实现。
在Go语言中,无需第三方依赖即可完成JSON编码——encoding/json 包内置的 json.Marshal() 函数正是标准答案。它接受任意可序列化的Go值(如 map[string]interface{}、[]string、结构体等),返回对应的JSON格式字节切片([]byte)及可能的错误。
以下是一个典型示例,将一个用户信息映射编码为JSON:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
user := map[string]interface{}{
"name": "John Doe",
"age": 112,
"active": true,
"tags": []string{"admin", "verified"},
}
data, err := json.Marshal(user)
if err != nil {
fmt.Fprintf(os.Stderr, "JSON encoding failed: %v\n", err)
return
}
// 输出格式化JSON(可选)
var prettyJSON bytes.Buffer
err = json.Indent(&prettyJSON, data, "", " ")
if err != nil {
fmt.Fprintf(os.Stderr, "Pretty print failed: %v\n", err)
return
}
os.Stdout.Write(prettyJSON.Bytes())
}
⚠️ 注意事项:
- json.Marshal() 要求字段可导出(首字母大写);若对结构体编码,应使用导出字段并可配合 json 标签控制键名与行为(如 json:"name,omitempty");
- interface{} 类型虽灵活,但缺乏编译期类型检查,生产环境推荐定义明确结构体以提升可维护性与性能;
- 若需处理大量数据或追求极致性能,可考虑 json.Encoder 直接写入 io.Writer(如 http.ResponseWriter),避免中间内存拷贝;
- 中文字符串默认以Unicode转义(\uXXXX),如需原生UTF-8输出,无需额外处理——json.Marshal 默认即生成合法UTF-8字节流。
总之,json.Marshal 是Go中JSON编码的事实标准,简洁、健壮、无依赖,完全满足从简单映射到复杂嵌套数据的序列化需求。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










