Go Academy · Pelajaran

Pengekodan dan Penyahkodan JSON

Marshal, Unmarshal dan tag struct

Pelajaran 3 daripada 413 langkah

Pengekodan dan Penyahkodan JSON ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Gambaran keseluruhan encoding/json

Pakej encoding/json Go menukarkan nilai Go kepada JSON dan menyahkod JSON kembali kepada nilai Go menggunakan tag struktur dan refleksi.

json.Marshal

json.Marshal menukarkan nilai Go kepada bait JSON. Fungsi ini mengembalikan kesilapan untuk jenis yang tidak disokong, seperti saluran, fungsi dan nombor kompleks.

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}

json.Unmarshal

json.Unmarshal menyahkod JSON menjadi nilai Go. Sasaran mestilah penuding.

var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"

Tag struktur

Gunakan tag struktur json: untuk mengawal nama medan, mengetepikan nilai kosong dan melangkau medan yang tidak dieksport.

type Product struct {
    ID    int    `json:"id"`
    Price float64 `json:"price,omitempty"` // omit if zero
    secret string // unexported: ignored
}

json.Encoder / json.Decoder

Untuk penstriman, seperti badan respons atau permintaan HTTP, gunakan Encoder dan Decoder dan bukannya Marshal/Unmarshal supaya keseluruhan muatan tidak perlu dimuatkan ke dalam memori.

// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)

Menyahkod ke dalam map[string]any

Nyahkod JSON yang tidak diketahui ke dalam peta generik:

var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])

json.Number

Secara lalai, nombor dalam peta generik dinyahkod sebagai float64. Gunakan decoder.UseNumber() untuk menyahkodnya sebagai json.Number sambil mengekalkan ketepatan.

dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)

Penyahkodan tersuai

Laksanakan json.Marshaler atau json.Unmarshaler untuk mengawal pengekodan atau penyahkodan bagi sesuatu jenis, contohnya untuk format tarikh tersuai.

func (d Date) MarshalJSON() ([]byte, error) {
    return json.Marshal(d.Format("2006-01-02"))
}

Meninggalkan medan

Gunakan omitempty untuk melangkau nilai sifar. Gunakan json:"-" untuk sentiasa mengecualikan medan daripada keluaran JSON tanpa mengira nilainya.

Hidden string `json:"-"`

Mengendalikan null

null JSON dinyahkod menjadi nilai sifar Go bagi skalar, atau menetapkan penuding kepada nil. Marshal penuding nil sebagai null.

Paparan cantik

Gunakan json.MarshalIndent untuk keluaran yang mudah dibaca manusia:

data, _ := json.MarshalIndent(u, "", "  ")

Semakan pantas

Apakah fungsi tag struktur `json:"name,omitempty"`?

Ringkasan: Pengekodan dan Penyahkodan JSON

Isi penting:

  • json.Marshal/Unmarshal untuk dalam memori; Encoder/Decoder untuk strim
  • Tag struktur mengawal nama, omitempty dan pengecualian
  • Jenis tersuai melaksanakan Marshaler/Unmarshaler
  • Gunakan json.MarshalIndent untuk keluaran penyahpepijatan
Percuma untuk bermula

Pelajari Go dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Pengekodan dan Penyahkodan JSON” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Pengekodan dan Penyahkodan JSON”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengekodan dan Penyahkodan JSON”?

Marshal, Unmarshal dan tag struct Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Go Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengekodan dan Penyahkodan JSON” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membaca Fail dengan os dan bufio
  2. Menulis Fail dan Fail Sementara
  3. Pengekodan dan Penyahkodan JSON
  4. Penstriman JSON dan CSV
← Kembali ke Go Academy