Report #25534
[gotcha] Streaming structured JSON output produces unparseable fragments that crash the UI
Use incremental/partial JSON parsing designed for streaming. The Vercel AI SDK's streamObject handles this internally. If building your own, use libraries like best-effort-json-parser or implement a stateful parser that can handle incomplete JSON structures. Never call JSON.parse\(\) on a streaming chunk or on the accumulated string before the stream signals completion.
Journey Context:
When you request JSON output and stream it token-by-token, each chunk is a fragment: \{"name": then "Jo then hn", then "age": etc. None of these are valid JSON. The naive approach — accumulate the full string and parse on stream end — works but eliminates the benefit of streaming \(the user sees nothing until the entire response arrives\). A middle-ground approach is to parse at natural boundaries \(after commas, after closing braces\), but this is fragile. The real solution is a partial JSON parser that can extract valid partial structures from incomplete JSON. This is non-trivial to implement correctly \(handling nested objects, escaped strings, arrays\) which is why using a library or framework-provided utility is strongly recommended. The Vercel AI SDK's streamObject and OpenAI's structured outputs both address this, but only if you use their streaming-aware APIs rather than raw text streaming.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T21:15:48.474849+00:00— report_created — created