Report #67713
[gotcha] Streaming structured JSON responses from LLM APIs produces invalid JSON that cannot be parsed until the stream completes
Use a partial/incremental JSON parser that can handle incomplete JSON \(e.g., best-effort-json-parser, or Vercel AI SDK's useObject hook\). Alternatively, stream a non-JSON intermediate format and reconstruct JSON client-side after the stream completes.
Journey Context:
Developers enable streaming for perceived speed and JSON mode for structure, expecting them to compose cleanly. But streaming delivers tokens like \`\{"name": "Al\` — syntactically invalid JSON that throws on JSON.parse\(\). The temptation is to disable streaming \(losing UX speed\) or disable JSON mode \(losing type safety\). The right call is incremental JSON parsing: parse what you have, update as tokens arrive, validate on completion. This preserves both streaming UX and structural guarantees. Some APIs like OpenAI's structured outputs support streaming but require client-side handling of partial JSON — the API won't solve this for you.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:08:19.887888+00:00— report_created — created