Go语言将结构体数据保存为JSON格式数据

Go语言将结构体数据保存为JSON格式数据,第1张

概述JSON 格式是一种用途广泛的对象文本格式。在 Go语言中,结构体可以通过系统提供的 json.Marshal() 函数进行序列化。为了演示怎样通过反射获取结构体成员及各种值的过程,下面使用反射 JsON 格式是一种对象文本格式,是当前互联网最常用的信息交换格式之一。在Go语言中,可以使用 Json.Marshal() 函数将结构体格式的数据格式化为 JsON 格式。

想要使用 Json.Marshal() 函数需要我们先引入 enCoding/Json 包,示例代码如下:
package mainimport (    "enCoding/Json"    "fmt")func main() {    // 声明技能结构体    type Skill struct {        name  string        Level int    }    // 声明角色结构体    type Actor struct {        name   string        Age    int        Skills []Skill    }    // 填充基本角色数据    a := Actor{        name: "cow boy",Age:  37,Skills: []Skill{            {name: "Roll and roll",Level: 1},{name: "Flash your dog eye",Level: 2},{name: "Time to have Lunch",Level: 3},},}    result,err := Json.Marshal(a)    if err != nil {        fmt.Println(err)    }    JsonStringData := string(result)    fmt.Println(JsonStringData)}
运行结果如下:

{
    "name":"cow boy",
    "Age":37,
    "Skills":[
        {
            "name":"Roll and roll",
            "Level":1
        },
        {
            "name":"Flash your dog eye",
            "Level":2
        },
        {
            "name":"Time to have Lunch",
            "Level":3
        }
    ]
}

通过运行结果可以看出我们成功的将结构体数据转换成了 JsON 格式。

提示:为了便于查看这里将输出结果做了格式化处理。

在转换 JsON 格式时,JsON 的各个字段名称默认使用结构体的名称,如果想要指定为其它的名称我们可以在声明结构体时添加一个`Json:" "`标签,在" "中可以填入我们想要的内容,代码如下所示:
package mainimport (    "enCoding/Json"    "fmt")func main() {    // 声明技能结构体    type Skill struct {        name  string `Json:"name"`        Level int    `Json:"level"`    }    // 声明角色结构体    type Actor struct {        name   string        Age    int        Skills []Skill    }    // 填充基本角色数据    a := Actor{        name: "cow boy",err := Json.Marshal(a)    if err != nil {        fmt.Println(err)    }    JsonStringData := string(result)    fmt.Println(JsonStringData)}
运行结果如下:

{
    "name":"cow boy",
    "Skills":[
        {
            "name":"Roll and roll",
            "level":1
        },
        {
            "name":"Flash your dog eye",
            "level":2
        },
        {
            "name":"Time to have Lunch",
            "level":3
        }
    ]
}

通过运行结果可以看出,我们成功将 Skill 结构体的 name 和 Level 字段转换成了想要的内容。

我们还可以在上面的标签的" "中加入 omitempty(使用逗号,与前面的内容分隔),来过滤掉转换的 JsON 格式中的空值,如下所示:
package mainimport (    "enCoding/Json"    "fmt")func main() {    // 声明技能结构体    type Skill struct {        name  string `Json:"name,omitempty"`        Level int    `Json:"level"`    }    // 声明角色结构体    type Actor struct {        name   string        Age    int        Skills []Skill    }    // 填充基本角色数据    a := Actor{        name: "cow boy",Skills: []Skill{            {name: "",{name: "Flash your dog eye"},
    "Skills":[
        {
            "level":1
        },
            "level":0
        },
            "level":3
        }
    ]
}

通过对比 Skill 结构体的 name 和 Level 字段可以看出,name 字段的空值被忽略了,而 Level 字段则没有。

`Json:" "` 标签的使用总结为以下几点:FIEldname int `Json:"-"`:表示该字段被本包忽略;FIEldname int `Json:"myname"`:表示该字段在 JsON 里使用“myname”作为键名;FIEldname int `Json:"myname,omitempty"`:表示该字段在 JsON 里使用“myname”作为键名,并且如果该字段为空时将其省略掉;FIEldname int `Json:",omitempty"`:该字段在Json里的键名使用默认值,但如果该字段为空时会被省略掉,注意 omitempty 前面的逗号不能省略。 总结

以上是内存溢出为你收集整理的Go语言将结构体数据保存为JSON格式数据全部内容,希望文章能够帮你解决Go语言将结构体数据保存为JSON格式数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存