json-iterator / go

A high-performance 100% compatible drop-in replacement of "encoding/json"
http://jsoniter.com/migrate-from-go-std.html
MIT License
13.33k stars 1.02k forks source link

Added support for reading a string as an `io.Reader` #701

Open Webbmekanikern opened 3 months ago

Webbmekanikern commented 3 months ago

My use case was to read a base64 encoded file of unknown size, inside a JSON document that was sent via a webhook. I wanted to read it as a stream (io.Reader) to minimize memory usage and preventing crashes for huge strings:

func(body io.Reader) {
    iter := jsoniter.Parse(ConfigDefault, body, 4096)

    // Finding the wanted string is skipped here for brevity

    r := iter.ReadStringAsReader()
    dec := base64.NewDecoder(base64.StdEncoding, r)

    // Reading from `dec` is skipped here for brevity
}