JSPM

ai-json-fixer

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1471
  • Score
    100M100P100Q110411F
  • License MIT

A simple JSON parser designed to handle malformed JSON from Large Language Models

Package Exports

  • ai-json-fixer
  • ai-json-fixer/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ai-json-fixer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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