让我给您详细讲解“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技术站