JSON Marshaling and Unmarshaling
JSON marshaling va unmarshaling
YAML Data Pipeline kursida siz YAML'ni qo'lda, strings.Split bilan tahlil qildingiz — chunki bu muhitda tashqi YAML kutubxonasi yo'q edi. JSON uchun esa Go standart kutubxonasining o'zida to'liq yechim bor: encoding/json.
type Product struct {
Name string `json:"name"`
Price float64 `json:"price"`
}
p := Product{Name: "laptop", Price: 999.99}
data, _ := json.Marshal(p)
// data: {"name":"laptop","price":999.99}
var p2 Product
json.Unmarshal(data, &p2)Struct maydonlaridagi orqa qo'shtirnoqli yozuvlar — struct teglari (tags): json:"name" Go'ga "bu maydon JSON'da name deb nomlansin" deydi (Go maydon nomi Name katta harf bilan, JSON konvensiyasi esa odatda kichik harf bilan). json.Marshal struct'ni JSON matniga aylantiradi (marshaling), json.Unmarshal esa teskarisini qiladi (unmarshaling) — ikkinchisi Pointers & Memory kursidagi "joyida o'zgartirish" g'oyasidan foydalanadi: &p2 pointer sifatida uzatiladi, shunda Unmarshal uning maydonlarini to'g'ridan-to'g'ri to'ldira oladi.
>_ Exercise
Name string (json:"name") va Price float64 (json:"price") maydonlariga ega Product struct'ini yozing. mainda Product{Name: "laptop", Price: 999.99} yarating, uni json.Marshal bilan JSON'ga aylantirib chop eting, so'ngra json.Unmarshal bilan yangi Productga qaytarib, uning Name va Pricesini chop eting.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
encoding/json paketi struct teglari (json:"...") yordamida Go struct'lari va JSON matni orasida avtomatik aylantirish qiladi. Marshal struct'dan JSON yasaydi, Unmarshal esa pointer orqali struct'ni JSON'dan to'ldiradi.
NEXT UP
JSON Configuration Files
$ go run main.go
Kodingizni ishga tushiring