GoLang中Json Tag用法实例总结

yizhihongxing

让我给您详细讲解“GoLang中Json Tag用法实例总结”的完整攻略。

什么是Json Tag

在Go语言中,如果我们需要对struct进行序列化或反序列化,需要使用encoding/json包。这个包可用性很强大,可以让我们很方便的对struct进行Json和Go语言之间的转换。而在JSON格式中,json tag就显得尤为重要。Json tag是在结构体字段的后面添加一个meta信息,用来告诉编码和解码的逻辑,这个字段该如何应用。

Json Tag的基本用法

下面简单对Json tag的基本用法进行介绍:

type User struct {
    Name string `json:”name”`
    Age int `json:”age”`
    Gender string `json:”gender”`
}

在上述代码中,Name, Age和Gender都是struct中的字段,而使用Json tag后,我们就告诉了编码和解码的逻辑将Name转换为Json中的name,Age转换为Json中的age,Gender转换为Json中的gender。

Json Tag实例

现在我们来看一个具体的例子。我们定义一个Person类型,包含多个属性,其中BirthDay和Email属性的别名通过Json tag进行定义:

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Person struct {
    Name       string    `json:"name"`
    Age        int       `json:"age"`
    BirthDay   time.Time `json:"birthday"`
    Email      string    `json:"email"`
    Occupation string    `json:"occupation"`
    Avatar     []byte    `json:"-"`
}

func main() {
    birthday, _ := time.Parse("2006-01-02", "1990-01-02")
    person := &Person{
        Name:       "Tom",
        Age:        30,
        BirthDay:   birthday,
        Email:      "tom@example.com",
        Occupation: "engineer",
        Avatar:     []byte("avatar data"),
    }

    // Encoding Person to json data
    jsonData, err := json.MarshalIndent(person, "", "    ")
    if err != nil {
        fmt.Printf("Error marshaling toJson: %v\n", err)
    } else {
        fmt.Printf("Person json: %s\n", jsonData)
    }

    // Decoding json data to Person struct
    decodedJson := `{
                    "name": "Tom",
                    "age": 30,
                    "birthday": "1990-01-02T00:00:00Z",
                    "email": "tom@example.com",
                    "occupation": "engineer"
                   }`
    newPerson := &Person{}

    if err := json.Unmarshal([]byte(decodedJson), newPerson); err != nil {

        fmt.Printf("Invalid json data %v", err)

    } else {

        printPerson(*newPerson)
    }
}

func printPerson(p Person) {
    fmt.Printf("Name: %s\n", p.Name)
    fmt.Printf("Age: %d\n", p.Age)
    fmt.Printf("Birthday: %s\n", p.BirthDay.Format("2006-01-02"))
    fmt.Printf("Email: %s\n", p.Email)
    fmt.Printf("Occupation: %s\n", p.Occupation)
}

通过上面的代码示例,我们可以看到,通过使用Json tag,我们非常方便的就将Birthday和Email属性转换为了Json中的birthday和email。这样使得我们可以很方便的将Go语言中的struct类型数据序列化和反序列化到Json格式,或从Json格式反序列化到Go语言中的struct类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GoLang中Json Tag用法实例总结 - Python技术站

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

相关文章

  • javaScript中一些常见的数据类型检查校验

    下面是关于JavaScript中常见的数据类型检查校验的详细攻略。 概述 在JavaScript中,我们经常需要检查或校验数据类型,以确保我们的代码可以正确地处理各种数据。在做这些操作时,需要了解JavaScript中几种常见的数据类型,以及如何进行类型检查和校验。 常见的数据类型 以下是JavaScript中几种常见的数据类型: 字符串 字符串是一系列字符…

    JavaScript 2023年6月10日
    00
  • JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)

    在JavaScript中,可以使用new Date(str)语法将一个字符串转换为Date对象,其中str是日期字符串。但是在使用火狐或者IE浏览器时,可能会出现兼容性问题,如果字符串的格式不是标准的ISO格式(YYYY-MM-DDTHH:mm:ss.sssZ),就会出现错误。 以下是两种解决方法: 方法一:使用正则表达式修改日期字符串格式 可以使用正则表达…

    JavaScript 2023年6月10日
    00
  • JavaScript Array 对象

    以下是关于JavaScript Array对象的完整攻略。 JavaScript Array对象 JavaScript Array对象是一种特殊的对象,用于存储一组有序的数据。数组中的每个元素都有一个唯一的索引可以通过索引访问数组中的元素。数组可以包含任何类型的数据,包括数字、字符串、对象等。 下面是一个创建和访问数组的示例: var arr = [1, 2…

    JavaScript 2023年5月11日
    00
  • JavaScript中使用concat()方法拼接字符串的教程

    当我们需要在JavaScript中拼接多个字符串时,可以使用concat()方法。该方法将传递给它的字符串与原始字符串连接起来,并返回新的字符串,而不改变原始字符串。下面是使用concat()方法拼接字符串的完整攻略: 使用concat()方法拼接字符串的步骤: 步骤1:创建要拼接的字符串 在使用concat()方法之前,我们需要先定义要拼接的字符串。可以将…

    JavaScript 2023年5月28日
    00
  • javascript 得到文件后缀名的思路及实现

    下面我将详细讲解“Javascript 得到文件后缀名的思路及实现”的完整攻略。该攻略将包含以下几个方面: 思路介绍 实现步骤 实现示例 注意事项 首先,我们来看一下思路介绍。 思路介绍 在Javascript中要获取一个文件的后缀名,我们需要完成以下两个步骤: 获取文件名 从文件名中提取后缀名 第一步我们可以使用String对象自带的split方法或者正则…

    JavaScript 2023年5月27日
    00
  • Javascript表单验证要注意的事项

    Javascript表单验证是Web开发中的重要部分,可以帮助保证用户输入的正确性和安全性。以下是Javascript表单验证需要注意的事项: 1.客户端验证仅作为辅助验证 客户端验证是在用户提交表单之前在浏览器端进行的验证,主要目的是为了提高用户的体验和减少不必要的服务器请求。但是客户端验证容易被绕过,因此客户端验证应该作为辅助验证,服务器端仍然需要进行严…

    JavaScript 2023年6月10日
    00
  • JavaScript创建数组的方法详解

    JavaScript创建数组的方法详解 在JavaScript中创建数组的方法有很多,本文将详细讲解其中的6种方法。 1. 直接量 使用直接量的方式可以快速创建一个数组,只需要使用方括号[],并在其中用逗号隔开各元素。示例如下: let arr1 = [1, 2, 3]; 2. 使用new Array() 使用new Array()的方式也可以创建一个数组,…

    JavaScript 2023年5月27日
    00
  • javascript RegExp multiline多行匹配影响的^

    JavaScript的正则表达式是一类对文本进行模式匹配的工具,其中RegExp对象是正则表达式的表示。 在正则表达式中,有一些特殊字符和元字符,用于匹配特定的文本,只要掌握这些特殊字符和元字符,就可以更加灵活和高效的处理文本。 其中^是表示字符串的起始位置,在单行模式中表示匹配以目标字符串开始的字符串,而在多行模式中,^匹配每行的起始位置。 multili…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部