If your prompt still contains three paragraphs pleading "respond ONLY with valid JSON, no markdown, no explanation…", you're solving a 2023 problem. Every major API now ships a structured-output / JSON-schema mode that constrains generation at the decoding level: the model literally cannot emit invalid JSON or unknown fields.
The prompt's job shifts: the schema handles shape, your prompt handles semantics — what each field means, how to decide values, what to do when information is missing. Put field-by-field decision rules in the prompt (or in the schema's `description` fields), and reserve an explicit place for uncertainty, like a `confidence` field or nullable values, so the model isn't forced to fabricate.