golang2021数据格式(69)Go语言将结构体数据保存为JSON格式数据

boyanx7天前技术教程3

    JSON 格式是一种对象文本格式,是当前互联网最常用的信息交换格式之一。在Go语言中,可以使用 json.Marshal() 函数将结构体格式的数据格式化为 JSON 格式。

    想要使用 json.Marshal() 函数需要我们先引入 encoding/json 包,示例代码如下:

    package main

    import (
    "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 main

    import (
    "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",
    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

    }

    ]

    }

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

    我们还可以在上面的标签的" "中加入 omitempty(使用逗号,与前面的内容分隔),来过滤掉转换的 JSON 格式中的空值,如下所示:

    package main

    import (
    "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",
    Age: 37,
    Skills: []Skill{
    {Name: "", Level: 1},
    {Name: "Flash your dog eye"},
    {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":[

    {

    "level":1

    },

    {

    "name":"Flash your dog eye",

    "level":0

    },

    {

    "name":"Time to have Lunch",

    "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 前面的逗号不能省略。



标签: js格式化json

相关文章

好用工具分享 - 漂亮的免费开源工具HTTP Toolkit

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)针对性地拦截 HTTP 和 HTTPS,包括以下客户端:桌面浏览器,如Chrome、Edge 和 FirefoxAndroid应用程序和浏览...

使用 StreamJsonRpc 在 ASP.NET Core 中启用 JSON-RPC

StreamJsonRpc 是微软开发的一个开源库,用于在 .NET 平台中实现基于 JSON-RPC 2.0 规范 的远程过程调用(RPC)。它通过流(如管道、网络流等)实现高效的跨进程或跨网络通信...

每天一个 Python 库:json 数据读写技巧合集,实战最常用!

在自动化测试、接口联调、配置管理中,我们经常会遇到 JSON 数据格式。Python 内置的 json 模块,让你轻松搞定数据的读写与转换,今天就带你系统掌握最常用的 json 操作技巧,一看就会,立...

Java Jackson 中如何将 JSON 对象转换为字符串

通常来说只需要下面的 1 行代码就可以完成下面的转换了。请考察下面的代码:String newsletterJSON = mapper.writerWithDefaultPrettyPrinter()...

15 个非常好用的 JSON 工具

JSON(JavaScript Object Notation)是一种流行的数据交换格式,已经成为许多应用程序中常用的标准。无论您是开发Web应用程序,构建API,还是处理数据,使用JSON工具可以大...

js中的JSON.stringify()方法的用法

关注我,知码前端 获取更多知识~~,公众号: 知码前端前言上节说了json的一些基本知识,现在说一下在js中处理json的两个重要方法JSON.stringify()和JSON.parse()方法。上...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。