# jsonrepair
Repair invalid JSON documents.
Try it out in a minimal demo: https://josdejong.github.io/jsonrepair/
Use it in a full-fledged application: https://jsoneditoronline.org
Read the background article ["How to fix JSON and validate it with ease"](https://jsoneditoronline.org/indepth/parse/fix-json/)
The following issues can be fixed:
- Add missing quotes around keys
- Add missing escape characters
- Add missing commas
- Add missing closing brackets
- Replace single quotes with double quotes
- Replace special quote characters like `“...”`  with regular double quotes
- Replace special white space characters with regular spaces
- Replace Python constants `None`, `True`, and `False` with `null`, `true`, and `false`
- Strip trailing commas
- Strip comments like `/* ... */` and `// ...`
- Strip JSONP notation like `callback({ ... })`
- Strip escape characters from an escaped string like `{\"stringified\": \"content\"}`
- Strip MongoDB data types like `NumberLong(2)` and `ISODate("2012-12-19T06:01:17.171Z")`
- Concatenate strings like `"long text" + "more text on next line"`
- Turn newline delimited JSON into a valid JSON array, for example:
    ```
    { "id": 1, "name": "John" }
    { "id": 2, "name": "Sarah" }
    ```
## Install
```
$ npm install jsonrepair
```
Note that in the `lib` folder, there are builds for ESM, UMD, and CommonJs.
## Use
Use with an ES modules import (recommended):
```js
import { jsonrepair } from 'jsonrepair'
try {
  // The following is invalid JSON: is consists of JSON contents copied from 
  // a JavaScript code base, where the keys are missing double quotes, 
  // and strings are using single quotes:
  const json = "{name: 'John'}"
  
  const repaired = jsonrepair(json)
  
  console.log(repaired) // '{"name": "John"}'
} catch (err) {
  console.error(err)
}
```
Use in CommonJS (not recommended):
```js
const { jsonrepair } = require('jsonrepair')
const json = "{name: 'John'}"
console.log(jsonrepair(json)) // '{"name": "John"}'
```
Use with UMD in the browser (not recommended):
```html 
```
### API
```ts
// @throws JSONRepairError 
jsonrepair(json: string) : string
```
The function `jsonrepair` throws an exception `JSONRepairError` when an issue is encountered which could not be solved. When no error is thrown, the output will be valid JSON.
### Command Line Interface (CLI)
When `jsonrepair` is installed globally using npm, it can be used on the command line. To install `jsonrepair` globally:
```bash
$ npm install -g jsonrepair
```
Usage:
```
$ jsonrepair [filename] {OPTIONS}
```
Options:
```
--version, -v       Show application version
--help,    -h       Show help
```
Example usage:
```
$ jsonrepair broken.json                         # Repair a file, output to console
$ jsonrepair broken.json > repaired.json         # Repair a file, output to file
$ jsonrepair broken.json --overwrite             # Repair a file, replace the file itself
$ cat broken.json | jsonrepair                   # Repair data from an input stream
$ cat broken.json | jsonrepair > repaired.json   # Repair data from an input stream, output to file
```
### Alternatives:
Similar libraries:
- https://github.com/RyanMarcus/dirty-json
### Develop
To build the library (ESM, CommonJs, and UMD output in the folder `lib`):
```
$ npm install 
$ npm run build
```
To run the unit tests:
```
$ npm test
```
To run the linter (eslint):
```
$ npm run lint
```
To automatically fix linter issues:
```
$ npm run format
```
To run the linter, build all, and run unit tests and integration tests:
```
$ npm run build-and-test
```
### Release
To release a new version:
```
$ npm run release
```
This will:
- lint 
- test
- build
- increment the version number
- push the changes to git, add a git version tag
- publish the npm package 
To try the build and see the change list without actually publishing:
```
$ npm run release-dry-run
```
## License
Released under the [ISC license](LICENSE.md).