OpenAI structured outputs are pretty stable for me. Gemini sometimes responds with a completely different structure. Gemini 3 flash with grounding sometimes returns json inside ```json...``` causing parsing errors.
https://github.com/josdejong/jsonrepair
might be useful ( i am not the author )
In case you're using OpenRouter, check out their new Response Healing feature that claims to solve exactly this issue.
https://openrouter.ai/announcements/response-healing-reduce-...