encoding/json paketi
- Go kursu
- Orta seviye
- Ders 59/80
- 4 dk
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
package main
import (
"encoding/json"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
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
b, err := json.____(urun)
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=" |