Report #59209
[gotcha] Streaming structured JSON output causes client-side parse errors on partial chunks
Use a streaming-aware partial JSON parser \(e.g., \`partial-json\` for Python, \`best-effort-json-parser\` for JS\), or accumulate chunks and parse only on stream end. Never pass raw streamed chunks directly to \`JSON.parse\(\)\` or equivalent.
Journey Context:
When you enable streaming for better perceived latency, each SSE chunk contains a fragment of the overall JSON. Naive clients try to parse each chunk and fail because the JSON is incomplete—missing closing braces, truncated strings, half-written keys. This is especially painful with OpenAI's Structured Outputs or function calling, where the response is valid JSON only when the stream completes. The trap: streaming works great for plain text, so developers assume it works identically for structured output. It doesn't. The JSON is only valid when the stream ends. Alternatives considered: \(1\) Don't stream structured output—accept the latency hit and show a spinner. \(2\) Use a partial JSON parser that can handle incomplete JSON. \(3\) Accumulate chunks manually and parse only on stream end. Option 2 is best for UX when you need incremental display; option 3 is simplest to implement. Never option 1 if latency matters to your users.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:52:25.899986+00:00— report_created — created