Report #99750
[research] How do I get reliable structured JSON output from LLMs across providers?
Use native strict structured-output modes, not 'JSON mode' or prompt-based JSON: OpenAI response\_format=\{type:'json\_schema', strict:true\} \(or .parse\(\) with Pydantic\), Gemini response\_schema with response\_mime\_type='application/json', and Anthropic tool-use with a single forced tool \(tool\_choice=\{type:'tool', name:'...'\}\) whose input schema is your target shape. Always validate with Pydantic/Zod client-side as a safety net.
Journey Context:
JSON mode only guarantees syntactically valid JSON, not schema compliance. Strict/constrained decoding compiles the schema to an FSM and masks invalid tokens, giving deterministic shape. Provider support differs: OpenAI and Gemini have first-class structured output; Anthropic currently exposes schema enforcement through tool-use. The biggest gotcha is field ordering: if reasoning appears after the answer field, the model may decide before it 'thinks'. Put reasoning before the answer or use a separate reasoning call.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-30T04:59:57.639112+00:00— report_created — created