Go语言结构体转json的坑
Go语言结构体转json的坑
标签(空格分隔): go
json.Marshal()
JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。
针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:
- 字段的tag是"-",那么这个字段不会输出到JSON
- tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中
- tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中
- 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
代码示例
package main
import (
"encoding/json"
"fmt"
)
func main() {
type UserInfo struct {
Id int
Name string
Address string
}
type Comiket struct {
id int
title string
}
type Test struct {
Id int `json:"-"`
Content string `json:"content"`
IsDel bool `json:",string"`
Type int `json:"type, omitempty"`
}
c := Comiket{1, "AS动漫游戏嘉年华"}
v, error := json.Marshal(c)
fmt.Println(string(v))
fmt.Println(error)
fmt.Println("------------------")
User := UserInfo{1, "taylor", "USA"}
b, err := json.Marshal(User)
fmt.Println(string(b))
fmt.Println(err)
fmt.Println("------------------")
t := Test{Id:1, Content:"hello world", IsDel:true}
val, _ := json.Marshal(t)
fmt.Println(string(val))
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理