best-effort-json-parser

Parse incomplete json text in best-effort manner

best-effort-json-parser downloads best-effort-json-parser version best-effort-json-parser license

best-effort-json-parserSimilar Packages:

Npm Package Weekly Downloads Trend

3 Years
🌟 Show real-time usage chart on best-effort-json-parser's README.md, just copy the code below.
## Usage Trend
[![Usage Trend of best-effort-json-parser](https://npm-compare.com/img/npm-trend/THREE_YEARS/best-effort-json-parser.png)](https://npm-compare.com/best-effort-json-parser#timeRange=THREE_YEARS)

Cumulative GitHub Star Trend

🌟 Show GitHub stars trend chart on best-effort-json-parser's README.md, just copy the code below.
## GitHub Stars Trend
[![GitHub Stars Trend of best-effort-json-parser](https://npm-compare.com/img/github-trend/best-effort-json-parser.png)](https://npm-compare.com/best-effort-json-parser)

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
best-effort-json-parser142,32327462.9 kB23 days agoBSD-2-Clause

README for best-effort-json-parser

best-effort-json-parser

Parse incomplete JSON text in best-effort manner with support for comments. Useful for partial JSON responses, broken network packages, or LLM responses exceeding tokens. It can also read configuration files with comments.

npm Package Version Minified Package Size Minified and Gzipped Package Size npm Package Downloads

Features

  • Typescript support
  • Isomorphic package: works in Node.js and browsers
  • Comment support: // inline, /* multi-line */, and <!-- HTML-style --> comments

Installation

npm install best-effort-json-parser

You can also install best-effort-json-parser with pnpm, yarn, or slnpm

Usage Example

Parsing incomplete JSON text

If the string, object, or array is not complete, the parser will return the partial data.

import { parse } from 'best-effort-json-parser'

let data = parse(`[1, 2, {"a": "apple`)
console.log(data) // [1, 2, { a: 'apple' }]

Parsing json with comments

Multiple types of comments are supported:

import { parse } from 'best-effort-json-parser'

let config = parse(`{
  "database": {
    "host": "localhost", // database server
    "port": 5432, /* default port */
    "ssl": true
  },
  "features": ["auth", "api"] <!-- injected by LLM -->
}`)

Comments inside strings are preserved and not treated as comments:

let data = parse(`{
  "inline_comment": "// this is not a comment",
  "block_comment": "/* neither is this */",
  "html_comment": \`<!-- \${variable} -->\`,
  "value": 42
}`)

Note: The parser also supports template literals with backticks (`) for strings, in addition to single and double quotes.

Error Logging

By default, the parser logs errors to console.error. You can control error logging behavior:

import {
  disableErrorLogging,
  enableErrorLogging,
  setErrorLogger,
} from 'best-effort-json-parser'

// Disable error logging completely
disableErrorLogging()

// Re-enable error logging (default behavior)
enableErrorLogging()

// Set a custom error logger
setErrorLogger((message, data) => {
  // Your custom logging logic here
  console.log('Custom error:', message, data)

  // Common destinations for error data:
  // - Database storage for analysis
  // - File system logging
  // - Third-party services (Sentry, LogRocket, etc.)
  // - Monitoring and alerting systems
})

Typescript Signature

// Main parse function
function parse(s: string | undefined | null): any

// Parse namespace with additional properties
namespace parse {
  lastParseReminding: string | undefined
  onExtraToken: (text: string, data: any, reminding: string) => void | undefined
}

// Error logging functions
function setErrorLogger(logger: (message: string, data?: any) => void): void
function disableErrorLogging(): void
function enableErrorLogging(): void

More examples see parse.spec.ts

License

This is free and open-source software (FOSS) with BSD-2-Clause License