Sign inDemoInstall


Package Overview
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies



JSON.parse with context information on error

Version published
Weekly downloads
decreased by-1.77%
Install size
9.71 kB
Weekly downloads

Package description

What is json-parse-even-better-errors?

The json-parse-even-better-errors package is an npm package that provides an improved JSON.parse function. It offers better error messages than the default JSON.parse, making it easier to debug issues with JSON data. It can pinpoint the exact location and cause of the error in the JSON string.

What are json-parse-even-better-errors's main functionalities?

Improved error messages

This feature enhances the error messages provided by JSON.parse. In the code sample, if the JSON is invalid, it will throw an error with a message that includes the position and reason for the failure, making it easier to identify and fix the issue.

const parseJSON = require('json-parse-even-better-errors');
try {
  const obj = parseJSON('{"foo": "bar", "baz": }');
} catch (e) {

Other packages similar to json-parse-even-better-errors



3.0.2 (2024-05-04)

Bug Fixes

  • c45eec2 #54 node 22 behavior (@lukekarrys)


  • fecc81f #54 bump @npmcli/template-oss to 4.22.0 (@lukekarrys)
  • 3c7bd80 #54 postinstall for dependabot template-oss PR (@lukekarrys)
  • 04a6747 #53 bump @npmcli/template-oss from 4.21.3 to 4.21.4 (@dependabot[bot])




json-parse-even-better-errors is a Node.js library for getting nicer errors out of JSON.parse(), including context and position of the parse errors.

It also preserves the newline and indentation styles of the JSON data, by putting them in the object or array in the Symbol.for('indent') and Symbol.for('newline') properties.


$ npm install --save json-parse-even-better-errors

Table of Contents


const parseJson = require('json-parse-even-better-errors')

parseJson('"foo"') // returns the string 'foo'
parseJson('garbage') // more useful error message
parseJson.noExceptions('garbage') // returns undefined


  • Like JSON.parse, but the errors are better.
  • Strips a leading byte-order-mark that you sometimes get reading files.
  • Has a noExceptions method that returns undefined rather than throwing.
  • Attaches the newline character(s) used to the Symbol.for('newline') property on objects and arrays.
  • Attaches the indentation character(s) used to the Symbol.for('indent') property on objects and arrays.


To preserve indentation when the file is saved back to disk, use data[Symbol.for('indent')] as the third argument to JSON.stringify, and if you want to preserve windows \r\n newlines, replace the \n chars in the string with data[Symbol.for('newline')].

For example:

const txt = await readFile('./package.json', 'utf8')
const data = parseJsonEvenBetterErrors(txt)
const indent = Symbol.for('indent')
const newline = Symbol.for('newline')
// .. do some stuff to the data ..
const string = JSON.stringify(data, null, data[indent]) + '\n'
const eolFixed = data[newline] === '\n' ? string
  : string.replace(/\n/g, data[newline])
await writeFile('./package.json', eolFixed)

Indentation is determined by looking at the whitespace between the initial { and [ and the character that follows it. If you have lots of weird inconsistent indentation, then it won't track that or give you any way to preserve it. Whether this is a bug or a feature is debatable ;)


parse(txt, reviver = null, context = 20)

Works just like JSON.parse, but will include a bit more information when an error happens, and attaches a Symbol.for('indent') and Symbol.for('newline') on objects and arrays. This throws a JSONParseError.

parse.noExceptions(txt, reviver = null)

Works just like JSON.parse, but will return undefined rather than throwing an error.

class JSONParseError(er, text, context = 20, caller = null)

Extends the JavaScript SyntaxError class to parse the message and provide better metadata.

Pass in the error thrown by the built-in JSON.parse, and the text being parsed, and it'll parse out the bits needed to be helpful.

context defaults to 20.

Set a caller function to trim internal implementation details out of the stack trace. When calling parseJson, this is set to the parseJson function. If not set, then the constructor defaults to itself, so the stack trace will point to the spot where you call new JSONParseError.



Last updated on 04 May 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.


Related posts

SocketSocket SOC 2 Logo


  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc