Report #24493
[gotcha] Streaming structured JSON output cannot be parsed per-chunk — JSON.parse\(\) throws on every partial SSE fragment
Use a partial/incremental JSON parser designed for streaming \(e.g., Vercel AI SDK \`streamObject\`, or \`partial-json\` library\). Never call \`JSON.parse\(\)\` on individual SSE data chunks. Either buffer the complete response before parsing, or use a parser that handles incomplete documents.
Journey Context:
When using structured output with streaming, each SSE chunk contains a delta — a few tokens that are syntactically incomplete JSON fragments. A chunk might be \`\{"name": "Al\` — not valid JSON. Developers try to parse each chunk to update the UI incrementally, but \`JSON.parse\(\)\` always throws on partial input. The naive fix of buffering everything defeats the purpose of streaming. The correct approach is a partial JSON parser that can extract valid values from incomplete documents, allowing incremental UI updates as the JSON streams in. This is a particularly nasty gotcha because it only appears at runtime with real streaming responses — unit tests with mocked complete responses pass fine.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T19:31:25.994021+00:00— report_created — created