Working with Dynamic JSON
Dinamik JSON bilan ishlash
Har doim ham JSON'ning shakli oldindan ma'lum bo'lavermaydi. Bunday holda struct o'rniga map[string]interface{} ishlatiladi — "har qanday kalit, har qanday qiymat" degani.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := []byte(`{"name":"Zilola","active":true,"score":97}`)
var m map[string]interface{}
err := json.Unmarshal(raw, &m)
if err != nil {
fmt.Println("xato:", err)
return
}
fmt.Println(m["name"])
fmt.Println(m["active"])
}interface{} (yoki yangi Go'larda any) — "men hali qanday tur ekanini bilmayman" degan tur. map[string]interface{} esa har qanday JSON obyektini qabul qila oladigan universal quti. Kamchiligi: qiymatlarni ishlatishdan oldin ularning haqiqiy turini aniqlashtirish (type assertion) kerak bo'ladi — buni oldingi "Interfaces & Polymorphism" kursida ko'rgan edingiz.
>_ Exercise
Noma'lum shakldagi JSON'dan kerakli qiymatlarni oling.
- •raw'ni map[string]interface{} ga Unmarshal qiling
- •m["city"] qiymatini chop eting
- •m["population"] qiymatini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
JSON'ning shakli oldindan noma'lum bo'lsa, map[string]interface{} universal konteyner sifatida ishlatiladi — lekin JSON'dagi barcha sonlar float64 sifatida keladi.
NEXT UP
JSON Streaming
$ go run main.go
Kodingizni ishga tushiring