best-effort-json-parser
v1.4.0
Published
Parse incomplete json text in best-effort manner
Maintainers
Readme
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.
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-parserYou 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(): voidMore examples see parse.spec.ts
License
This is free and open-source software (FOSS) with BSD-2-Clause License
