


Artikel yang menerangkan operasi json golang secara terperinci
Artikel ini membawakan anda pengetahuan yang berkaitan tentang golang terutamanya memperkenalkan kepada anda operasi json golang.
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"}}
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)
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Artikel ini membincangkan perintah Go FMT dalam pengaturcaraan GO, yang format kod untuk mematuhi garis panduan gaya rasmi. Ia menyoroti kepentingan GO FMT untuk mengekalkan konsistensi kod, kebolehbacaan, dan mengurangkan perdebatan gaya. Amalan terbaik untuk

Di bawah rangka kerja beegoorm, bagaimana untuk menentukan pangkalan data yang berkaitan dengan model? Banyak projek beego memerlukan pelbagai pangkalan data untuk dikendalikan secara serentak. Semasa menggunakan beego ...
