golang struct json tag的使用以及深入讲解

让我来详细讲解一下 "golang struct json tag的使用以及深入讲解" 的攻略。

1. 什么是 struct json tag?

golang中,可以在一个 struct 中通过添加 json tag,来指定如何将 struct 转换为 JSON 格式(序列化)或将 JSON 数据转换为 struct(反序列化)。在 JSON Tag 中,一个字段的名称是必需的,然后,可以指定多个属性来定义 JSON 序列化的细节。

2. 如何使用 struct json tag?

我们通过举例说明来了解如何使用 struct tag。

2.1 示例一:将 struct 转化为 JSON 格式

下面的代码演示了如何使用 struct json tag 将 struct 转化为 JSON 格式:

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name   string `json:"userName"`
    Age    int    `json:"age"`
    Gender string `json:"gender,omitempty"`
}

func main() {
    user := User{
        Name: "Alice",
        Age:  20,
    }

    jsonStr, err := json.Marshal(user)
    if err != nil {
        fmt.Println("Failed to marshaling, err:", err)
        return
    }

    fmt.Println(string(jsonStr))
}

输出结果为:

{"userName":"Alice","age":20}

可以看出,我们在每个字段后面通过 json:"<name>" 来指定该字段序列化后的 key 名称,如果不指定,则默认使用该字段的名称。

同时,我们还可以使用 omitempty 选项,来控制在该字段为空时是否序列化该字段。在上面的示例中,我们在 Gender 字段后面添加了 omitempty,当 Gender 为空时,在序列化 json 时该字段会被忽略。

2.2 示例二:从 JSON 数据反序列化为 struct

下面的代码演示了如何使用 struct json tag 将 JSON 数据反序列化为 struct:

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name   string `json:"userName"`
    Age    int    `json:"age"`
    Gender string `json:"gender,omitempty"`
}

func main() {
    jsonStr := `{"userName":"Bob", "age":30}`

    var user User

    err := json.Unmarshal([]byte(jsonStr), &user)
    if err != nil {
        fmt.Println("Failed to unmarshaling, err:", err)
        return
    }

    fmt.Printf("Name:%s, Age:%d, Gender:%s\n", user.Name, user.Age, user.Gender)
}

输出结果为:

Name:Bob, Age:30, Gender:

可以看出,我们同样通过 struct json tag 的方式,在每个字段后面指定了 JSON 数据中对应的 key 名称,之后通过 json.Unmarshal 函数将 JSON 数据解析成了对应的 struct 对象。

3. struct tag 常用的属性介绍

  • json:"<name>":指定该字段序列化后对应的 key 名称;
  • json:"-":不进行序列化,即该字段在序列化时会被忽略;
  • json:",omitempty":当该字段为空时,在序列化 json 时该字段会被忽略;
  • json:"<name>,string":将该字段序列化为字符串;
  • json:"<name>,number":将该字段序列化为 JSON 数字;
  • json:"<name>,string,omitempty":将该字段序列化为字符串,在该字段为空时在序列化时忽略该字段;
  • json:"<name>,string,omitempty":将该字段序列化为 JSON 数字,在该字段为空时在序列化时忽略该字段。

注:还有其他更多的属性可以用来对 struct tag 进行明确的控制,可以在需要的时候查看官方文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang struct json tag的使用以及深入讲解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • SQL2000个人版 应用程序正常初始化失败0乘以C0000135失败

    首先,需要明确的是,这个错误通常是由于系统缺失或损坏了必要的 Microsoft Visual C++ Redistributable 库文件所导致的。为解决这个问题,通常需要重新安装或修复这些库文件。 以下是一个可能的攻略,步骤如下: 下载并安装最新版的 Microsoft Visual C++ Redistributable 库文件。可以从 Micros…

    C 2023年5月30日
    00
  • C标准库的实现详解

    C标准库的实现详解 简介 assert.h 是 C 标准库中的一个头文件,该头文件包含一个宏 assert() 和一些用于调试的宏定义,它们可以在程序运行中检查和诊断条件是否为真,即程序是否按照预期运行。通常情况下,assert() 用于调试程序,以确保程序的正确性。 assert()宏的使用 assert() 宏用于在程序运行期间检测给定的条件是否为真。如…

    C 2023年5月23日
    00
  • C++实现查壳程序代码实例

    欢迎阅读本文介绍的“C++实现查壳程序代码实例”的攻略指南。 什么是“查壳程序”? 在软件开发中,为了保护软件不被破解,可能会采取加壳的措施。加壳就是在程序原有代码的基础上,添加加密算法来保护程序的安全性。 那么,查壳程序就是用来反向解析加壳程序,获取加壳器信息和原始代码的工具。 使用C++实现查壳程序的步骤 第一步:理解PE文件结构 PE文件概念:PE文件…

    C 2023年5月23日
    00
  • C++ boost::asio编程-同步TCP详解及实例代码

    C++ boost::asio编程-同步TCP详解及实例代码 简介 本文将详细讲解使用C++ boost::asio库进行同步TCP编程的方式,并提供两个实例代码进行说明。 什么是boost::asio boost::asio是一个使用纯C++编写的网络编程库,它提供了简化网络编程的接口,并且支持多种协议。boost::asio的设计中注重运行时效率和可靠性…

    C 2023年5月23日
    00
  • 可能是全网最详细的Qt连接MySQL数据库教程

    当我在写这篇文章时,我意识到Qt连接MySQL数据库是一个经常被问到的话题。然而,网上的教程大多只是简单的介绍,没有涉及到全面的细节,这给不熟悉Qt的开发人员带来了很多困惑。所以,我决定写这篇“可能是全网最详细的Qt连接MySQL数据库教程”,以便让大家更好地掌握这个主题。 1. 安装MySQL Connector/C++ 要在Qt中连接MySQL数据库,我…

    C 2023年5月22日
    00
  • Win11系统提示错误代码0xc000012f怎么解决?提示损坏的映像错误解决方法

    针对Win11系统提示错误代码0xc000012f和提示损坏的映像错误的问题,我整理了以下完整攻略,具体内容如下: 问题描述 当用户在使用Win11系统时,可能会遇到错误代码0xc000012f和提示损坏的映像错误的问题。这种情况下,系统可能难以启动或者部分功能无法正常使用。 问题原因 错误代码0xc000012f和提示损坏的映像错误通常是由于系统文件损坏或…

    C 2023年5月23日
    00
  • C语言 strchr()函数

    当要在一个字符串中查找某个字符的位置时,可以使用C语言中的strchr()函数。下面是strchr()函数的完整使用攻略。 函数原型 char *strchr(const char *str, int c); 在参数str所指向的字符串中搜索第一次出现字符c的位置。如果成功找到指定的字符,该函数返回指向该字符的指针;否则返回NULL。 参数说明 str:要查…

    C 2023年5月9日
    00
  • 详解SQL Server 中 JSON_MODIFY 的使用

    详解SQL Server 中 JSON_MODIFY 的使用 简介 在 SQL Server 2016 中,引入了 JSON 数据类型和一些新的 JSON 函数,其中之一是 JSON_MODIFY,它是一种修改 JSON 数据的函数。 在本文中,我们将详细介绍 JSON_MODIFY 函数的使用方法,包括语法、参数和示例。 语法 JSON_MODIFY 函数…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部