Rumah > Artikel > pembangunan bahagian belakang > Artikel yang menerangkan operasi json golang secara terperinci
Artikel ini membawakan anda pengetahuan yang berkaitan tentang golang terutamanya memperkenalkan kepada anda operasi json golang.
JSON ialah format pertukaran data ringan. Mudah membaca dan menulis. golang menyediakan pakej encoding/json
untuk memanipulasi data 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"}
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}
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 🎜>
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
data, _ = json.Marshal(struct { *User Skill string `json:"skill"` // 临时添加额外的 Skill字段}{ User: &user, Skill: "football",})fmt.Println("添加额外字段: ", string(data))
(3) Gabung dua struct
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
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
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)
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!