go语言struct转json

go语言struct转json,第1张

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))
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存