GoDasturchi
Custom JSON Marshaling

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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