0Pricing
Go Academy · Pelajaran

Menguraikan Respons JSON

Mengurai respons API menjadi struct Go

Menguraikan Respons 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.

Periksa status sebelum mendekode

Selalu verifikasi bahwa status respons adalah 2xx sebelum mencoba mendekode isi respons. Respons non-2xx mungkin berisi halaman kesalahan HTML, bukan JSON.

if resp.StatusCode < 200 || resp.StatusCode >= 300 {
    body, _ := io.ReadAll(resp.Body)
    return fmt.Errorf("status %d: %s", resp.StatusCode, body)
}

json.NewDecoder

Dekode isi respons sebagai aliran tanpa memuatnya sepenuhnya ke memori:

var result APIResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
    return fmt.Errorf("decode: %w", err)
}

Mendekode ke dalam peta generik

Untuk bentuk JSON yang tidak diketahui atau dinamis, dekode ke dalam map[string]any:

var m map[string]any
json.NewDecoder(resp.Body).Decode(&m)

Struktur bersarang

Modelkan JSON bersarang dengan struktur Go bersarang dan tag json:

type Repo struct {
    Name  string `json:"name"`
    Owner struct {
        Login string `json:"login"`
    } `json:"owner"`
}

Bidang opsional dengan pointer

Gunakan tipe pointer untuk bidang JSON opsional agar Anda dapat membedakan antara "bidang tidak ada" dan "bidang bernilai nol":

type Response struct {
    Data  *string `json:"data"`
    Error *string `json:"error"`
}

Mendekode larik

Dekode larik JSON langsung ke dalam slice Go:

var users []User
json.NewDecoder(resp.Body).Decode(&users)

Memeriksa kesalahan dekode

Bedakan kesalahan sintaks JSON dari kesalahan EOF yang tidak terduga—EOF berarti isi respons kosong (sama sekali tidak ada JSON).

err := json.NewDecoder(resp.Body).Decode(&v)
if errors.Is(err, io.EOF) {
    return fmt.Errorf("empty response body")
}

Pemeriksaan Content-Type

Verifikasi bahwa Content-Type respons adalah application/json sebelum mendekode untuk mencegah HTML diuraikan sebagai JSON tanpa disadari.

ct := resp.Header.Get("Content-Type")
if !strings.HasPrefix(ct, "application/json") {
    return fmt.Errorf("unexpected content-type: %s", ct)
}

Mengabaikan bidang yang tidak dikenal

json.Decoder mengabaikan bidang JSON yang tidak memiliki bidang struct yang cocok secara diam-diam. Ini adalah perilaku bawaan dan biasanya diinginkan untuk kompatibilitas ke depan.

Dekode ketat dengan DisallowUnknownFields

Panggil dec.DisallowUnknownFields() untuk mengembalikan kesalahan pada kunci yang tidak dikenal—berguna untuk menguraikan konfigurasi secara ketat, tetapi tidak untuk menggunakan API pihak ketiga.

dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
dec.Decode(&cfg)

Menggunakan kembali struct yang telah didekode

Nolkan struct sebelum mendekode jika digunakan kembali untuk beberapa respons agar data lama dari dekode sebelumnya tidak tersisa.

var result APIResult
result = APIResult{} // reset
json.NewDecoder(resp.Body).Decode(&result)

Pemeriksaan Singkat

Kesalahan apa yang dikembalikan json.Decoder.Decode ketika isi respons kosong?

Ringkasan: Mendekode Respons JSON

Poin penting:

  • Periksa kode status sebelum mendekode
  • json.NewDecoder untuk aliran; menghindari pemuatan seluruh isi ke memori
  • Verifikasi bahwa Content-Type adalah application/json
  • io.EOF berarti isi kosong; io.ErrUnexpectedEOF berarti JSON terpotong

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menguraikan Respons JSON” gratis?

Ya — teks lengkap “Menguraikan Respons 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 “Menguraikan Respons JSON”?

Mengurai respons API menjadi struct Go 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 “Menguraikan Respons 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

  1. Membuat Permintaan HTTP
  2. Mengatur Batas Waktu dan Header
  3. Menguraikan Respons JSON
  4. Penanganan Error dan Logika Percobaan Ulang
← Kembali ke Go Academy