Custom JSON Marshaling
Maxsus JSON kodlash
Ba'zan qiymatni JSON'ga standart usulda emas, o'zingiz belgilagan ko'rinishda chiqarish kerak bo'ladi — masalan pulni tiyin o'rniga "150.50 so'm" ko'rinishida. Buning uchun turingizga MarshalJSON metodini qo'shasiz.
package main
import (
"encoding/json"
"fmt"
)
type Money int // tiyin hisobida saqlanadi
func (m Money) MarshalJSON() ([]byte, error) {
s := fmt.Sprintf("\"%d.%02d so'm\"", m/100, m%100)
return []byte(s), nil
}
type Product struct {
Name string
Price Money
}
func main() {
p := Product{Name: "Kitob", Price: 15050}
data, _ := json.Marshal(p)
fmt.Println(string(data))
}Go'ning encoding/json paketi Marshal qilishdan oldin har doim so'raydi: "bu turda MarshalJSON() ([]byte, error) metodi bormi?" Bo'lsa — o'sha metodni chaqiradi va natijani aynan shu ko'rinishda ishlatadi, standart qoidalarni chetlab o'tadi. Bu — interfeyslar orqali "o'z xatti-harakatingizni belgilash" tamoyilining yana bir amaliy namunasi.
>_ Exercise
Status turi uchun o'zingizning JSON ko'rinishingizni yozing.
- •Status(0)="kutilmoqda", Status(1)="bajarildi" mosligini beruvchi MarshalJSON metodini yozing
- •Task struct'ini JSON'ga aylantirib chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
MarshalJSON() ([]byte, error) metodini qo'shish orqali istalgan turning JSON'da qanday ko'rinishini o'zingiz belgilashingiz mumkin.
NEXT UP
CSV Reading
$ go run main.go
Kodingizni ishga tushiring