GoDasturchi
JSON Streaming

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.

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

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

Hints (0/3)

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