CodeBlanks Logo Icon CodeBlanks

encoding/json paketi

encoding/json paketinin temelini öğrenirsin.

encoding/json paketi

encoding/json Go değerlerini JSON'a (Marshal) ve JSON'u Go değerlerine (Unmarshal) çevirir. Struct'ın yalnızca dışa aktarılmış (büyük harfle başlayan) alanları kodlanır:

type Urun struct {
    Ad    string
    Fiyat float64
    stok  int  // küçük harf: JSON'a girmez
}
b, _ := json.Marshal(Urun{"Kalem", 12.5, 3})
fmt.Println(string(b))  // {"Ad":"Kalem","Fiyat":12.5}

Go ve JSON türleri

Eşlemeler: bool ↔ true/false, sayılar ↔ number, string ↔ string, dilim/dizi ↔ array, struct ve map[string]T ↔ object, nil ↔ null. []byte base64 metne, time.Time RFC 3339 metnine çevrilir. Kanal, fonksiyon ve karmaşık sayılar kodlanamaz; Marshal hata döndürür.

Uygulama İlk Marshal

type Urun struct { Ad string; Fiyat float64 } tanımla. Urun{"Kalem", 12.5} değerini json.Marshal ile kodla; hata varsa yazdır, yoksa string(b)'yi yazdır.

Başlangıç kodu

main.go
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "encoding/json"
    "fmt"
)

type Urun struct {
    Ad    string
    Fiyat float64
}

func main() {
    b, err := json.Marshal(Urun{"Kalem", 12.5})
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

Beklenen çıktı

{"Ad":"Kalem","Fiyat":12.5}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir struct alanı JSON çıktısında neden görünmeyebilir?

  • Alan int olduğu için
  • JSON 3 alandan fazlasını desteklemediği için
  • Değeri sıfır olduğu için (her zaman)
  • Alan adı küçük harfle başladığı için Doğru cevap

Açıklama: json paketi reflection ile çalışır ve dışa aktarılmamış alanlara erişemez; sıfır değerler ise omitempty olmadıkça yazılır.

2 JSON'a çevir

Soru
b, err := json.____(urun)
Cevap
b, err := json.Marshal(urun)

Açıklama: json.Marshal değeri JSON baytlarına çevirir.

3 Go ve JSON

Kavram Anlamı
[]int{1, 2} [1,2]
map[string]int{"a": 1} {"a":1}
nil işaretçi null
[]byte("hi") "aGk="

Orta seviye bölümündeki tüm dersler