aotakeda / ai-json-fixer

A simple JSON parser specifically designed to handle malformed JSON output from Large Language Models (LLMs) like GPT, Claude, and others.

Home Page:https://www.npmjs.com/package/ai-json-fixer

Repository from Github https://github.comaotakeda/ai-json-fixerRepository from Github https://github.comaotakeda/ai-json-fixer

ai-json-fixer

A simple JSON parser specifically designed to handle malformed JSON output from Large Language Models (LLMs) like GPT, Claude, and others.

Features

Core

  • Markdown Block Extraction: Extracts JSON from ```json code blocks and inline code
  • Trailing Content Removal: Removes explanatory text after valid JSON structures
  • Quote Fixing: Fixes unescaped quotes inside JSON strings
  • Missing Comma Detection: Adds missing commas between array elements and object properties
    • Single-line JSON support for compact LLM outputs like {"a": 1 "b": 2} and [1 2 3]
    • Multi-line JSON support for formatted outputs

Key Benefits

  • Zero Dependencies: Pure TypeScript/JavaScript implementation
  • Comprehensive Testing: 86+ tests covering real LLM output patterns
  • TypeScript Support: Full type definitions included
  • Configurable: Multiple parsing modes and options
  • Error Recovery: Graceful handling of malformed input

Installation

npm install ai-json-fixer

Quick Start

import { LLMJSONParser } from 'ai-json-fixer';

const parser = new LLMJSONParser();

// Parse JSON from LLM output with markdown
const llmOutput = `Here's the data you requested:

\`\`\`json
{
  "users": [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25}
  ],
  "total": 2
}
\`\`\`

This JSON contains the user information.`;

const result = parser.parse(llmOutput);
console.log(result);
// Output: { users: [...], total: 2 }

Common Use Cases

Extract from Markdown

const input = `\`\`\`json\n{"key": "value"}\n\`\`\``;
const result = parser.parse(input); // { key: "value" }

Fix Quote Issues

const input = '{"message": "He said "hello" to me"}';
const result = parser.parse(input); // { message: 'He said "hello" to me' }

Remove Trailing Content

const input = '{"status": "ok"} The request was successful.';
const result = parser.parse(input); // { status: "ok" }

Handle Missing Commas

Multi-line JSON:

const input = `{
  "name": "John"
  "age": 30
}`;
const result = parser.parse(input); // { name: "John", age: 30 }

Single-line JSON:

// Objects
const input1 = '{"a": 1 "b": 2 "c": 3}';
const result1 = parser.parse(input1); // { a: 1, b: 2, c: 3 }

// Arrays
const input2 = '[1 2 3 4 5]';
const result2 = parser.parse(input2); // [1, 2, 3, 4, 5]

// Complex structures
const input3 = '[{"id": 1} {"id": 2}]';
const result3 = parser.parse(input3); // [{ id: 1 }, { id: 2 }]

API Reference

LLMJSONParser

parse<T>(input: string, options?: ParseOptions): T | null

Parse JSON input with automatic fixing. Returns parsed object or null if parsing fails.

tryParse<T>(input: string, options?: ParseOptions): ParseResult<T>

Parse with detailed results including applied fixes and confidence score.

Options

interface ParseOptions {
  mode?: 'strict' | 'standard' | 'aggressive';
  stripMarkdown?: boolean;
  trimTrailing?: boolean;
  fixQuotes?: boolean;
  addMissingCommas?: boolean;
  trackFixes?: boolean;
  throwOnError?: boolean;
  maxFixAttempts?: number;
}

Parse Result

interface ParseResult<T> {
  data: T | null;
  fixes?: Fix[];
  confidence?: number;
  warnings?: string[];
}

Development

# Install dependencies
npm install

# Run tests
npm test

# Build
npm run build

# Run examples
npx tsx examples/basic-usage.ts

License

MIT

About

A simple JSON parser specifically designed to handle malformed JSON output from Large Language Models (LLMs) like GPT, Claude, and others.

https://www.npmjs.com/package/ai-json-fixer

License:MIT License


Languages

Language:TypeScript 98.0%Language:JavaScript 2.0%