gojay icon indicating copy to clipboard operation
gojay copied to clipboard

Periodically flush the `buf` to the `Writer`.

Open abourget opened this issue 7 years ago • 1 comments

Hi and thanks for the lib.

My goal is to start pushing JSON to an io.Writer while it's being JIT encoded. I noticed that EncodeObject calls enc.Write() and manages the error, that MarshalJSONObject doesn't return an error and that when calling enc.Write() myself (from within a MarshalJSONObject() func), there's no place to bubble up the error.

Surely I'm doing something a bit off here.. but I simply want to flush the buf between rows (say I have 200,000 such rows, which are objects). I also wonder how the buf would handle the getPreviousRune if I were to Write() before my Array is closed.

any tips would help, thanks a lot!

abourget avatar Oct 03 '18 00:10 abourget

What I'm currently doing:

	enc.AddArrayKey("rows", gojay.EncodeArrayFunc(func(enc *gojay.Encoder) {
		lastIdx := len(r.Rows) - 1
		for idx, row := range r.Rows {
			enc.EncodeObject(row) // this flushes objects in between..
			if idx != lastIdx {
				enc.AppendByte(',')
			}
		}
	}))

which seems to work :)

abourget avatar Oct 03 '18 01:10 abourget