go语言struct转json
1,概览
1,我们使用go语言标准库的 json.Marshal() 函数将结构体转为json
2,结构体转json的时候, 可给结构体设置标签来自定义成员的键名
3,给结构体定义的json标签里配置里omitempty,可在该字段为空时忽略
注意:
给结构体定义json标签的时候要注意的问题:
`json:" "` 标签的使用总结为以下几点:
1,表示该字段被本包忽略;
field string `json:"-"`
2,表示该字段在 JSON 里使用“myName”作为键名;
field string `json:"myName"`
3,表示该字段在 JSON 里使用“myName”作为键名,并且如果该字段为空时将其省略掉;
field string `json:"myName,omitempty"`
4,该字段在json里的键名使用默认值,但如果该字段为空时会被省略掉,注意 omitempty 前面的逗号不能省略。
field string `json:",omitempty"`
2,实例:
package jsonDemo
import (
"fmt"
"encoding/json"
)
/**
*普通结构体转json
*返回值{"Name":"Taobao","Db":"MySQL","Env":"Centos7","Lang":[{"Name":"PHP","Other":"swoole,laravel"},{"Name":"GO","Other":"docker,beego"},{"Name":"python","Other":""},{"Name":"JAVA","Other":"Spring Boot"}]}
*/
func JsonDemoRun1() {
//编程语言结构体
type programLang struct {
Name string
Other string
}
//定义一个web项目结构体
type webItem struct {
Name string
Db string
Env string
Lang []programLang
}
item := &webItem{
Name: "Taobao",
Db: "MySQL",
Env: "Centos7",
Lang: []programLang{
{Name: "PHP", Other: "swoole,laravel"},
{Name: "GO", Other: "docker,beego"},
{Name: "python", Other: ""},
{Name: "JAVA", Other: "Spring Boot"},
},
}
fmt.Println(item)
res,err := json.Marshal(item)
if err != nil {
panic(err)
}
fmt.Println(res)
fmt.Println(string(res))
}
/**
*json定义标签和omitempty
*返回值:{"Name":"Taobao","Db":"MySQL","Env":"Centos7","Lang":[{"name":"PHP","tools":"swoole,laravel"},{"name":"GO","tools":"docker,beego"},{"name":"python"},{"name":"JAVA","tools":"Spring Boot"}]}
*/
func JsonDemoRun2() {
//编程语言结构体
type programLang struct {
Name string `json:"name"` //转json的时候自定义字段的标签,可用json标签定义
Other string `json:"tools,omitempty"` //转json的时候,自定义标签加omitempty,在此值为空的时候可忽略
}
//定义一个web项目结构体
type webItem struct {
Name string
Db string
Env string
Lang []programLang
}
item := &webItem{
Name: "Taobao",
Db: "MySQL",
Env: "Centos7",
Lang: []programLang{
{Name: "PHP", Other: "swoole,laravel"},
{Name: "GO", Other: "docker,beego"},
{Name: "python", Other: ""},
{Name: "JAVA", Other: "Spring Boot"},
},
}
fmt.Println(item)
res,err := json.Marshal(item)
if err != nil {
panic(err)
}
fmt.Println(res)
fmt.Println(string(res))
}