Report #86074
[gotcha] Streaming JSON output from AI models crashes UI with unparseable intermediate fragments
Use schema-aware incremental JSON parsing. With Vercel AI SDK, use \`streamObject\` with a Zod schema to get validated partial objects where only completed fields are surfaced. For custom implementations, never call JSON.parse on incomplete chunks; use a streaming JSON tokenizer that identifies completed key-value pairs, and render only those while showing loading placeholders for in-progress fields.
Journey Context:
The promise of streaming structured output is lower time-to-first-meaningful-data. But JSON is an atomic format: \`\{"name": "Al\` is not valid JSON and throws on parse. The three common failed approaches: \(1\) JSON.parse each chunk \(throws every time\), \(2\) buffer the entire response then parse \(defeats streaming\), \(3\) regex-based extraction \(fragile with nested structures\). The correct approach recognizes that you need the expected schema to determine which parts of a partial JSON blob are complete. If your schema has \`name: z.string\(\)\` and \`age: z.number\(\)\`, you can safely render \`name\` once you see the closing quote, even while \`age\` is still being generated. This is non-trivial from scratch, which is why \`streamObject\` exists. The key insight: streaming structured data requires schema-awareness at the parsing layer, not just at the validation layer.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T03:04:10.287162+00:00— report_created — created