DEV Community

AI JSONMedic
AI JSONMedic

Posted on • Originally published at aijsonmedic.com

I built a JSON repair tool for LLM output — here's why it exists

You ask an LLM for JSON. You get this:

Enter fullscreen mode Exit fullscreen mode


json
{
"name": "test",
"valid": True,
"items": [1, 2,

Enter fullscreen mode Exit fullscreen mode


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:

  1. Markdown fences`json wrapping the output
  2. Trailing commas[1, 2, 3,] (the model "runs out" of items but adds one more comma)
  3. Python literalsTrue, False, None instead of true, false, null
  4. Single quotes{'key': 'value'} instead of double quotes
  5. Smart quotes"key" (curly quotes from copy-paste)
  6. Unclosed brackets — truncated at max_tokens mid-array or mid-object
  7. Unclosed strings"value without closing
  8. Concatenated objects{"a":1}{"b":2} when streaming produces multiple chunks
  9. NDJSON — newline-delimited JSON that needs wrapping
  10. Python-style comments# this is a comment inside JSON
  11. JavaScript-style comments// inline or /* block */
  12. Escaped backslashes\\n instead of \n
  13. Duplicate keys — same key appearing twice (ambiguous — we warn, not silently pick)
  14. 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:

`
✅ Removed markdown code fence (`
json ... `)
✅ 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)