Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang struct转json

golang struct转json

WBOY
WBOYasal
2023-05-14 22:33:072218semak imbas

Golang ialah bahasa pengaturcaraan yang sangat popular. Ia bukan sahaja mempunyai prestasi serentak yang hebat, tetapi juga mempunyai perpustakaan standard yang kaya dan kod yang mudah dibaca. Di Golang, struct digunakan secara meluas. Struct bukan sahaja boleh merangkum data, tetapi juga memudahkan bersiri dan penyahserikatan. Dalam artikel ini, kita akan membincangkan cara menukar struct dalam format Golang kepada JSON.

Pertama, mari kita fahami apa itu JSON. JSON, singkatan untuk Notasi Objek JavaScript, ialah format pertukaran data ringan yang biasa digunakan untuk memindahkan data antara pelanggan dan pelayan. Berbanding dengan XML, format JSON lebih ringkas dan lebih mudah dibaca.

Di Golang, menukar struct kepada format JSON adalah sangat mudah. Kita boleh menyelesaikan tugas ini melalui pakej "pengekodan/json" terbina dalam. Berikut ialah contoh kod ringkas yang menunjukkan cara menukar struct kepada format JSON:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    person := Person{Name: "Amy", Age: 30}
    personJSON, err := json.Marshal(person)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(personJSON))
}

Dalam contoh ini, kami mentakrifkan jenis struct bernama Person dan mencipta contoh bernama orang. Kami kemudian menggunakan fungsi json.Marshal() untuk menukar contoh orang kepada format JSON dan mencetak hasilnya ke konsol.

Perlu diambil perhatian bahawa dalam definisi struct Person, kami menambah tag "json". Teg ini mewakili nama kunci yang digunakan semasa menukar struct kepada format JSON. Dalam contoh ini, "nama" dan "umur" ialah nama kunci JSON, dan Nama dan Umur ialah nama medan struct dalam Golang. Jika kami tidak menentukan tag json untuk medan struct, nama kunci JSON akan sama dengan nama medan.

type Person struct {
    Name string
    Age  int
}

Dalam contoh ini, nama medan dalam struct dan nama kunci JSON adalah sama, jadi ia akan dipetakan secara automatik.

Selain menggunakan fungsi json.Marshal() untuk menukar struct kepada format JSON, kita juga boleh menggunakan fungsi json.Unmarshal() untuk menukar format JSON kepada struct. Berikut ialah contoh kod:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    personJSON := `{"name":"Amy","age":30}`
    var person Person
    err := json.Unmarshal([]byte(personJSON), &person)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(person.Name, person.Age)
}

Dalam contoh ini, kami mentakrifkan rentetan bernama personJSON yang mengandungi data contoh Orang yang diwakili dalam format JSON. Kami kemudian menggunakan fungsi json.Unmarshal() untuk menukar rentetan personJSON kepada menaip Person dan menyimpan hasilnya dalam pembolehubah bernama orang. Akhir sekali, kami mencetak nama dan umur contoh orang itu.

Perlu diambil perhatian bahawa dalam fungsi json.Unmarshal() , parameter pertama ialah kepingan jenis bait, yang mewakili data JSON untuk ditukar menjadi struct. Parameter kedua ialah penunjuk kepada jenis Orang, yang mewakili data JSON yang akan dinyahkodkan menjadi contoh jenis ini.

Kesimpulannya, menukar struct dalam Golang kepada format JSON adalah tugas yang sangat mudah. Kita boleh melakukan ini menggunakan pakej "pengekodan/json" terbina dalam. Dengan menambahkan teg "json" pada medan struct, kami boleh menyesuaikan nama kunci JSON. Sebaliknya, jika tiada label dinyatakan, nama kunci JSON akan sama dengan nama medan. Apabila melakukan penyahserikatan JSON, pastikan anda melepasi jenis sasaran sebagai penunjuk supaya nilai jenis itu dikemas kini apabila fungsi itu kembali.

Atas ialah kandungan terperinci golang struct转json. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn