Skip to content

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

License

Notifications You must be signed in to change notification settings

aotakeda/ai-json-fixer

Repository files navigation

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.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published