Rumah >pembangunan bahagian belakang >Golang >Artikel yang menerangkan operasi json golang secara terperinci

Artikel yang menerangkan operasi json golang secara terperinci

PHPz
PHPzke hadapan
2023-03-29 14:24:27995semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang golang terutamanya memperkenalkan kepada anda operasi json golang.

Artikel yang menerangkan operasi json golang secara terperinci

operasi golang json

JSON ialah format pertukaran data ringan. Mudah membaca dan menulis. golang menyediakan pakej encoding/json untuk memanipulasi data JSON.

1 Penukaran antara struktur dan JSON

(1) Gunakan kaedah json.Marshal() untuk menukar struktur menjadi rentetan JSON

import (
	"encoding/json"
	"fmt")type Student struct {
	Name string
	Age int
	Skill string}func main()  {
	stu := Student{"tom", 12, "football"}
	data, err := json.Marshal(&stu)
	if err != nil {
		fmt.Printf("序列化错误 err=%v\n", err)
		return
	}
	fmt.Println("序列化后: ", string(data))}

Cetakan: Selepas bersiri: {"Nama":"tom","Umur":12,"Kemahiran":"bola sepak"}

(2 ) JSON rentetan kepada struktur, anda boleh menggunakan kaedah json.Unmarshal()

func main()  {
	str := `{"Name":"tom","Age":12,"Skill":"football"}`
	var stu2 Student
	err := json.Unmarshal([]byte(str), &stu2)
	if err != nil {
		fmt.Printf("反序列化错误 err=%v\n", err)
		return
	}
	fmt.Printf("反序列化后: Student=%v, Name=%v\n", stu2, stu2.Name)}

untuk mencetak: Selepas penyahserikatan: Student={ tom 12 football }, Name=tom

(3) Bagaimana untuk menyesuaikan nama kunci selepas siri struktur

Untuk nama kunci tersuai, anda boleh Berikan tag标签

type Student struct {
	Name string   `json:"stu_name"`
	Age int       `json:"stu_age"`
	Skill string  // 也可以不指定 tag标签,默认就是 变量名称}func main()  {
	stu := Student{"tom", 12, "football"}
	data, err := json.Marshal(&stu)
	if err != nil {
		fmt.Printf("序列化错误 err=%v\n", err)
		return
	}
	fmt.Println("序列化后: ", string(data))}

kepada pembolehubah struct Selepas mencetak, anda boleh melihat bahawa nama kunci telah bertukar kepada nama tag teg yang kami nyatakan
Selepas bersiri: {"stu_name":" tom", " stu_age":12, "Kemahiran": "bola sepak"}

2. Penukaran Peta dan JSON

func main()  {
	// map 转 Json字符串
	m := make(map[string]interface{})
	m["name"] = "jetty"
	m["age"] = 16

	data, err := json.Marshal(&m)
	if err != nil {
		fmt.Printf("序列化错误 err=%v\n", err)
		return
	}
	fmt.Println("序列化后: ", string(data))    // 打印: 序列化后:  {"age":16,"name":"jetty"}

	// Json字符串 转 map
	str := `{"age":25,"name":"car"}`
	err = json.Unmarshal([]byte(str), &m)
	if err != nil {
		fmt.Printf("反序列化错误 err=%v\n", err)
		return
	}
	fmt.Printf("反序列化后: map=%v, name=%v\n", m, m["name"])
	// 打印: 反序列化后: map=map[age:25 name:car], name=car}

3. Bolehkah pembolehubah struktur ditukar kepada data json tanpa teg? Kerana maklumat pantulan tidak dapat diperoleh, ia tidak boleh dipindahkan.

    Jika huruf pertama pembolehubah itu ditulis dengan huruf besar, ia adalah awam. Ia boleh ditukar secara normal tanpa mengira sama ada teg ditambah atau tidak Pembolehubah dengan teg akan dipaparkan mengikut nama teg.
  • Contoh:

Dengan mencetak, kami mendapati pembolehubah huruf kecil, seperti umur dan addr, tidak ditukar kepada data json.

type User struct {
	Name string    `json:"u_name"`
	age int        `json:"u_age"`
	Skill string   // 也可以不指定 tag标签,默认就是 变量名称
	addr string}func main()  {
	user := User{"admin", 23, "football", "上海"}
	data, err := json.Marshal(&user)
	if err != nil {
		fmt.Printf("序列化错误 err=%v\n", err)
		return
	}
	fmt.Println("序列化后: ", string(data))  // 打印: 序列化后:  {"u_name":"admin","Skill":"football"}}
Ringkasan:

Jika huruf pertama adalah huruf kecil, ia tidak boleh ditukar menjadi data json tanpa mengira sama ada ia ditambah dengan tag, manakala jika huruf besar, ia boleh alias, dan jika ia tidak ditambah, ia akan berada dalam json Medan adalah konsisten dengan nama asal pembolehubah struktur

4 🎜>

(1) Abaikan medan yang ditentukan bagi struct

Abaikan medan: {"u_name":"admin","email":"user@163 .com"}}

type User struct {
	Name string    `json:"u_name"`
	Password string `json:"password"`
	Email string `json:"email"`}func main()  {
	user := User{"admin", "pwd", "user@163.com"}
	person := Person{23, "上海"}
	// 忽略掉 Password 字段
	data, _ := json.Marshal(struct {
		*User
		Password string `json:"password,omitempty"`
	}{User: &user})
	fmt.Println("忽略字段: ", string(data))  // 打印: 忽略字段: {"u_name":"admin","email":"user@163.com"}}

(2) Tambah medan Tambahan

Tambah medan tambahan: {"u_name":"admin","password":" pwd","email":"user@163.com","skill":" bola sepak"}

data, _ = json.Marshal(struct {
	*User
	Skill string `json:"skill"`  // 临时添加额外的 Skill字段}{
	User: &user,
	Skill: "football",})fmt.Println("添加额外字段: ", string(data))

(3) Gabung dua struct

Gabungkan dua struct: {"u_name":"admin","password":" pwd","email":"user@163.com","Age":23,"addr":"Shanghai"}

type User struct {
	Name string    `json:"u_name"`
	Password string `json:"password"`
	Email string `json:"email"`}type Person struct {
	Age int
	Addr string `json:"addr"`}func main()  {
    // 初始化两个 struct
	user := User{"admin", "pwd", "user@163.com"}
	person := Person{23, "上海"}
	
	data, _ := json.Marshal(struct {
		*User		*Person	}{
		User: &user,
		Person: &person,
	})
	
	fmt.Println("合并两个struct: ", string(data))}

(4) Rentetan yang dihantar kepada jenis int

(5) Json dibahagikan kepada dua struct
emp := struct {                    // 创建匿名 struct
	Num int `json:"num,string"`}{15,}data, _ := json.Marshal(&emp)fmt.Println("数字转成字符串: ", string(data))       // 数字转成字符串: {"num":"15"}str := `{"Num":"25"}`_ = json.Unmarshal([]byte(str), &emp)fmt.Printf("字符串转成数字: Emp.Num=%v\n", emp.Num) // 字符串转成数字: Emp.Num=25

dibahagikan kepada dua struct: User={system abc user2@163.com}, Person={23 Hangzhou}

str = ` {"u_name":"system","password":"abc","email":"user2@163.com","Age":23,"addr":"杭州"}`var user2 Uservar person2 Person_ := json.Unmarshal([]byte(str), &struct {
	*User	*Person}{
	User: &user2,
	Person: &person2,})fmt.Printf("分成两个struct: User=%v, Person=%v\n", user2, person2)

Pembelajaran yang disyorkan: "pergi tutorial video"

Atas ialah kandungan terperinci Artikel yang menerangkan operasi json golang secara terperinci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam