Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan siri JSON tersuai dalam Go?

Bagaimana untuk menggunakan siri JSON tersuai dalam Go?

王林
王林asal
2023-05-11 16:55:421302semak imbas

Memandangkan bahasa pengaturcaraan moden mempunyai keperluan yang semakin tinggi untuk struktur data dan penghantaran rangkaian, format JSON juga telah menjadi format pertukaran data yang penting. JSON boleh menghantar data dengan lebih baik, dan bahasa Go menjadi semakin popular kerana prestasi tinggi dan antara muka aplikasinya yang mudah. Dalam Go, anda boleh menyesuaikan pensirilan JSON untuk memenuhi keperluan penghantaran data dengan lebih baik. Artikel ini akan meneroka cara menggunakan siri JSON tersuai dalam Go.

1. Apakah siri JSON?

Siri JSON merujuk kepada menukar objek kepada rentetan dalam format JSON dan menghantarnya ke perkhidmatan atau pelanggan lain semasa penghantaran rangkaian supaya mereka boleh membaca dan menggunakan objek itu dengan jayanya. Dalam rentetan JSON bersiri, setiap nama atribut akan ditukar kepada rentetan dan setiap nilai akan ditukarkan kepada jenis yang sepadan dalam JSON untuk memastikan data universal antara format Penghantaran yang berbeza.

2. Siri JSON dalam Go

Dalam bahasa Go, siri JSON boleh dicapai dengan menggunakan 'pengekodan/json' dalam pustaka standard. Apabila struktur data ialah struktur umum dan nilai yang berasingan, anda boleh terus menggunakan fungsi Marshal pustaka standard untuk menukarnya kepada rentetan JSON yang sepadan, seperti ditunjukkan di bawah:

type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

func main() {
    user := User{"Amy", "123456"}
    jsonStr, err := json.Marshal(user)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonStr))
}

Rentetan JSON keluaran ialah:

{"username":"Amy","password":"123456"}

3. Siri JSON tersuai

Dalam bahasa Go, anda boleh menyesuaikan siri JSON dengan melaksanakan kaedah MarshalJSON dan UnmarshalJSON. Kaedah MarshalJSON digunakan untuk menukar struktur atau taip kepada rentetan JSON, manakala UnmarshalJSON boleh menukar rentetan JSON kepada struktur atau jenis yang sepadan.

Sebelum melaksanakan siri JSON tersuai, anda perlu memahami beberapa teg struktur:

  1. json: Apabila mentakrifkan struktur, anda boleh menambah 'json:" sebelum medan. custom_name"' untuk menentukan nama medan apabila mensiri rentetan JSON.
  2. omitempty: Apabila nilai medan tidak kosong, medan akan disertakan semasa bersiri dan apabila medan kosong, medan tidak akan disertakan.

Seterusnya, ambil gaji sebagai contoh untuk melaksanakan siri JSON tersuai.

type Salary struct {
    Basic int `json:"basic,omitempty"`
    Bonus int `json:"bonus,omitempty"`
}

func (s Salary) MarshalJSON() ([]byte, error) {
    var result string
    if s.Bonus != 0 {
        result = fmt.Sprintf(""basic":%d,"bonus":%d", s.Basic, s.Bonus)
    } else {
        result = fmt.Sprintf(""basic":%d", s.Basic)
    }
    return []byte("{" + result + "}"), nil
}

func main() {
    salary := Salary{
        Basic:  10000,
        Bonus:  5000,
    }
    jsonStr, err := json.Marshal(salary)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonStr))
}

Jalankan kod di atas, rentetan JSON output ialah:

{"basic":10000,"bonus":5000}

Di sini, kami melaksanakan kaedah MarshalJSON tersuai, dalam Marsha, hanya apabila medan Bonus bukan 0 , nilainya adalah output sahaja; apabila ia adalah 0, medan itu bukan output.

4. Pemformatan JSON tersuai

Dalam bahasa Go, anda juga boleh menyesuaikan pemformatan JSON dengan melaksanakan kaedah MarshalText dan UnmarshalText. Kaedah MarshalText digunakan untuk menukar struktur atau taip kepada teks dalam format []bait, manakala UnmarshalText boleh menukar teks dalam format []bait kepada struktur atau jenis yang sepadan.

Mengambil tarikh sebagai contoh, sesuaikan fungsi pemformatan JSON untuk mengeluarkan format yang serupa dengan "2022-09-21".

type Date struct {
    time.Time
}

func (d Date) MarshalText() ([]byte, error) {
    return []byte(d.Time.Format("2006-01-02")), nil
}

func (d *Date) UnmarshalText(text []byte) error {
    parse, err := time.Parse("2006-01-02", string(text))
    if err != nil {
        return err
    }
    d.Time = parse
    return nil
}

func main() {
    date := Date{time.Now()}
    jsonStr, err := json.Marshal(date)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonStr))

    var newDate Date
    err = json.Unmarshal([]byte(""2022-09-21""), &newDate)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(newDate.Time)
}

Jalankan kod di atas, rentetan JSON keluaran ialah:

"2022-09-21"
2022-09-21 00:00:00 +0000 UTC

Seperti yang dapat dilihat daripada contoh di atas, apabila menyesuaikan pesirilan dan penyahserilangan JSON, anda perlu memahami pesirilan JSON Prinsip dan pelaksanaan perpustakaan standard boleh digunakan secara fleksibel dalam pembangunan sebenar. Pada masa yang sama, kami juga boleh mentakrifkan kaedah pemformatan JSON yang memenuhi keperluan untuk objek kami sendiri, menyediakan alatan asas dan sokongan untuk memenuhi keperluan penghantaran data dengan lebih baik dalam senario yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan siri JSON tersuai dalam Go?. 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