Skip to content

beenotung/best-effort-json-parser

Repository files navigation

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

About

Parse incomplete json text in best-effort manner

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors