让我给您详细讲解“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类型。

Python技术站热门推荐:

Python技术站热门推荐

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