You ask an LLM for JSON. You get this:
json
{
"name": "test",
"valid": True,
"items": [1, 2,
markdown
Three problems in one response: markdown fences the LLM wasn't supposed to add, True instead of true (Python literal), and the response was cut off mid-array.
JSON.parse() throws on all three. A linter tells you what's wrong. But you're left fixing it manually.
I kept hitting this wall so often that I built a dedicated repair pipeline: AI JSONMedic.
Why existing tools don't cut it
JSONLint / JSONFormatter — great for valid-ish JSON with one missing comma. Not built for LLM failure modes: they flag errors but don't repair them.
jsonrepair (npm) — solid library, handles many cases. AI JSONMedic actually uses it as a last-resort fallback. But it doesn't tell you what it changed, and doesn't handle all the LLM-specific cases we needed.
The 14 failure modes we target
Through building this, we catalogued how LLMs specifically break JSON:
-
Markdown fences —
`jsonwrapping the output -
Trailing commas —
[1, 2, 3,](the model "runs out" of items but adds one more comma) -
Python literals —
True,False,Noneinstead oftrue,false,null -
Single quotes —
{'key': 'value'}instead of double quotes -
Smart quotes —
"key"(curly quotes from copy-paste) - Unclosed brackets — truncated at max_tokens mid-array or mid-object
-
Unclosed strings —
"value without closing -
Concatenated objects —
{"a":1}{"b":2}when streaming produces multiple chunks - NDJSON — newline-delimited JSON that needs wrapping
-
Python-style comments —
# this is a commentinside JSON -
JavaScript-style comments —
// inlineor/* block */ -
Escaped backslashes —
\\ninstead of\n - Duplicate keys — same key appearing twice (ambiguous — we warn, not silently pick)
- BOM / encoding issues — UTF-8 BOM at start of response
What makes the repair pipeline different
Each pass targets one failure mode. The order matters — strip fences first, then normalize quotes, then fix commas, then close truncated structures. Each change is tracked.
The result isn't just a fixed JSON blob — it's a diff showing exactly what changed:
`json ...
✅ Removed markdown code fence (``)
✅ Converted Python literal: True → true
✅ Closed truncated array (added missing `]`)
`
That explanation is half the value when you're debugging a production pipeline.
100% client-side
The repair runs entirely in your browser. Your production payloads never leave your machine. Open the Network tab — there's no request for the repair itself.
JSON Studio
Beyond repair, there's a full JSON toolbox:
- Format / minify
- Validate with error highlighting
- Tree view
- Diff two JSON blobs
- Convert: JSON ↔ CSV, YAML, XML, SQL
- JSONPath query
- JSON Schema generation
- TypeScript type generation
- JWT decode
We're launching on Product Hunt July 23
If you find it useful — or find broken JSON it doesn't handle — I'd love to hear about it.
Check it out on Product Hunt →
Launching Wednesday July 23 — would mean a lot if you upvoted on the day. And if you paste in broken JSON that beats the repair engine, I'll add a pass for it.
Top comments (0)