Pengodean dan Penguraian JSON
Marshal, Unmarshal, dan tag struct
Pengodean dan Penguraian JSON adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Gambaran umum encoding/json
Paket encoding/json milik Go mengubah nilai Go menjadi JSON dan mengubah JSON kembali menjadi nilai Go menggunakan tag struktur dan refleksi.
json.Marshal
json.Marshal mengonversi nilai Go menjadi byte JSON. Fungsi ini mengembalikan kesalahan untuk tipe yang tidak didukung (kanal, fungsi, dan bilangan 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 mendekode JSON menjadi nilai Go. Sasaran harus berupa penunjuk.
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"Tag struktur
Gunakan tag struktur json: untuk mengatur nama bidang, menghilangkan nilai kosong, dan melewati bidang yang tidak diekspor.
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
Untuk pemrosesan aliran (isi respons atau permintaan HTTP), gunakan Encoder dan Decoder, bukan Marshal/Unmarshal, agar seluruh muatan tidak perlu dimuat ke memori.
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)Mendekode ke dalam map[string]any
Dekode JSON yang tidak dikenal ke dalam peta generik:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
Secara bawaan, angka dalam peta generik didekode sebagai float64. Gunakan decoder.UseNumber() untuk mendekodenya sebagai json.Number dan mempertahankan presisi.
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)Pengodean khusus
Implementasikan json.Marshaler atau json.Unmarshaler untuk mengendalikan pengodean dan dekodean suatu tipe, misalnya untuk format tanggal khusus.
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}Menghilangkan bidang
Gunakan omitempty untuk melewati nilai nol. Gunakan json:"-" untuk selalu mengecualikan bidang dari keluaran JSON, apa pun nilainya.
Hidden string `json:"-"`Menangani null
Null JSON didekode menjadi nilai nol Go untuk skalar, atau menetapkan penunjuk ke nil. Marshal penunjuk nil sebagai null.
Pencetakan rapi
Gunakan json.MarshalIndent untuk keluaran yang mudah dibaca manusia:
data, _ := json.MarshalIndent(u, "", " ")Pemeriksaan Singkat
Apa yang dilakukan tag struktur `json:"name,omitempty"`?
Ringkasan: Pengodean dan Dekodean JSON
Poin penting:
- json.Marshal/Unmarshal untuk data dalam memori; Encoder/Decoder untuk aliran
- Tag struktur mengatur nama, omitempty, dan pengecualian
- Tipe khusus mengimplementasikan Marshaler/Unmarshaler
- Gunakan json.MarshalIndent untuk keluaran penelusuran kesalahan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengodean dan Penguraian JSON” gratis?
Ya — teks lengkap “Pengodean dan Penguraian JSON” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengodean dan Penguraian JSON”?
Marshal, Unmarshal, dan tag struct Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pengodean dan Penguraian JSON” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membaca File dengan os dan bufio
- Menulis File dan File Sementara
- Pengodean dan Penguraian JSON
- Streaming JSON dan CSV