Report #84733
[gotcha] Streaming structured JSON output breaks rendering and causes UI crashes on partial data
Never parse streaming JSON incrementally without a partial-JSON-aware parser. Use libraries like partial-json or json-stream, or buffer the complete response before parsing. For streaming UX, show a skeleton or loading state for structured content and only render once the JSON object is complete and validated.
Journey Context:
The instinct is to stream everything for perceived speed. But structured outputs \(JSON, function call arguments\) arrive as incomplete fragments. A partial JSON string like \`\{"name": "Al\` is syntactically invalid — JSON.parse\(\) throws, components crash, and users see error states instead of partial progress. Teams try workarounds like appending \`\}\` to force-close partial JSON, but this produces semantically wrong data: truncated strings, missing fields, wrong types. The counter-intuitive realization is that for structured data, buffering the full response and showing a loading state is better UX than streaming, because a loading spinner at 1 second feels better than a broken UI at 500ms. If you must stream structured output, use a dedicated incremental JSON parser that handles incomplete tokens gracefully, and never pass unparsed fragments to rendering code.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T00:48:49.186769+00:00— report_created — created