0Pricing
Go Academy · Ders

JSON Yanıtlarının Kodunu Çözme

API yanıtlarını Go yapılarına ayrıştırma

JSON Yanıtlarının Kodunu Çözme, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Ayrıştırmadan önce durumu denetleyin

Gövdeyi ayrıştırmaya çalışmadan önce yanıt durumunun her zaman 2xx olduğunu doğrulayın. 2xx dışındaki yanıtlar JSON yerine HTML hata sayfaları içerebilir.

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

json.NewDecoder

Yanıt gövdesini tamamen belleğe yüklemeden akış olarak ayrıştırın:

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

Genel bir eşlemeye ayrıştırma

Şekli bilinmeyen veya dinamik JSON yapıları için map[string]any türüne ayrıştırın:

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

İç içe yapılar

İç içe Go yapıları ve json etiketleriyle iç içe JSON modelleyin:

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

İşaretçilerle isteğe bağlı alanlar

İsteğe bağlı JSON alanları için işaretçi türlerini kullanarak "alan yok" ile "alan sıfır değerine ayarlanmış" durumlarını ayırt edebilmenizi sağlayın:

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

Dizileri ayrıştırma

JSON dizilerini doğrudan Go dilimlerine ayrıştırın:

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

Ayrıştırma hatalarını denetleme

JSON söz dizimi hatalarını beklenmeyen EOF hatalarından ayırt edin — EOF, gövdenin boş olduğu (hiç JSON bulunmadığı) anlamına gelir.

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

Content-Type denetimi

HTML'nin JSON olarak sessizce ayrıştırılmasını önlemek için ayrıştırmadan önce yanıt Content-Type değerinin application/json olduğunu doğrulayın.

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

Bilinmeyen alanları yok sayma

json.Decoder, eşleşen bir yapı alanı bulunmayan JSON alanlarını sessizce yok sayar. Bu varsayılan davranıştır ve ileriye dönük uyumluluk için genellikle tercih edilir.

DisallowUnknownFields ile katı ayrıştırma

Bilinmeyen anahtarlar için hata döndürmek üzere dec.DisallowUnknownFields() çağrısını kullanın — katı yapılandırma ayrıştırma işlemlerinde yararlıdır, ancak üçüncü taraf API'lerini kullanırken uygun değildir.

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

Ayrıştırılan yapıyı yeniden kullanma

Önceki ayrıştırmadan kalan eski verileri önlemek için birden fazla yanıt arasında yeniden kullanacağınız yapıyı ayrıştırmadan önce sıfırlayın.

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

Hızlı Kontrol

Yanıt gövdesi boş olduğunda json.Decoder.Decode hangi hatayı döndürür?

Özet: JSON Yanıtlarını Ayrıştırma

Temel noktalar:

  • Ayrıştırmadan önce durum kodunu denetleyin
  • Akış için json.NewDecoder kullanın; gövdenin tamamını bellekte tutmayı önler
  • Content-Type değerinin application/json olduğunu doğrulayın
  • io.EOF boş gövde, io.ErrUnexpectedEOF ise kesilmiş JSON anlamına gelir

Sıkça Sorulan Sorular

“JSON Yanıtlarının Kodunu Çözme” dersi ücretsiz mi?

Evet — “JSON Yanıtlarının Kodunu Çözme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“JSON Yanıtlarının Kodunu Çözme” dersinde ne öğreneceğim?

API yanıtlarını Go yapılarına ayrıştırma Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“JSON Yanıtlarının Kodunu Çözme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HTTP İstekleri Gönderme
  2. Zaman Aşımları ve Üst Bilgileri Ayarlama
  3. JSON Yanıtlarının Kodunu Çözme
  4. Hata Yönetimi ve Yeniden Deneme Mantığı
← Go Academy Sayfasına Dön