JSON Streaming
JSON oqim (stream) bilan ishlash
Ba'zan JSON obyektlari bittalab emas, ketma-ket "oqim" shaklida keladi (masalan, tarmoqdan). json.NewDecoder bunday holatda Unmarshaldan ko'ra qulayroq — u ma'lumotni bittalab, xotirani band qilmasdan o'qiydi.
package main
import (
"encoding/json"
"fmt"
"strings"
)
func main() {
streamData := `{"a":1}{"a":2}{"a":3}`
dec := json.NewDecoder(strings.NewReader(streamData))
for dec.More() {
var x map[string]int
if err := dec.Decode(&x); err != nil {
fmt.Println("xato:", err)
return
}
fmt.Println(x["a"])
}
}json.NewDecoder(reader) — istalgan io.Readerdan (fayl, tarmoq, matn) JSON o'qiydigan dekoder yaratadi. dec.More() — "yana JSON obyekti bormi?" deb so'raydi. dec.Decode(&x) esa navbatdagi bitta obyektni o'qib beradi. Bu naqsh — bir vaqtning o'zida bir nechta JSON hujjatini o'qishning to'g'ri usuli (Unmarshal esa faqat bitta yaxlit JSON kutadi).
>_ Exercise
Ketma-ket kelgan JSON obyektlarini birma-bir o'qing va yig'indisini toping.
- •streamData'ni json.NewDecoder bilan o'qishga tayyorlang
- •dec.More() sikli ichida har bir {"score":N} obyektini o'qing
- •score qiymatlarining yig'indisini "Jami: N" ko'rinishida chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
json.NewDecoder va dec.More()/Decode() ketma-ket kelayotgan JSON obyektlarini oqim sifatida, xotirani tejab o'qish uchun ishlatiladi.
NEXT UP
Custom JSON Marshaling
$ go run main.go
Kodingizni ishga tushiring