Parse then re-stringify JSON strings and files, preserving indentation and line endings.
The primary use case is to load/edit/save JSON files like package.json in a lossless-ish way.
import MagicJSON from 'magic-json'
// Read and parse some JSON object from a file:
const pkg = await MagicJSON.fromFile('./package.json')
// Edit the object at will:
pkg.version = '2.0.0'
delete pkg.private
// Then write it back to the same file,
// with the same indentation and line endings:
await MagicJSON.write(pkg)MagicJSON can be used as a drop-in replacement for the JavaScript JSON API.
MagicJSON.parse<T = any>(text: string, reviver?: (this: any, key: string, value: any) => any): T
- This API has the same signature as
JSON.parse(), which it calls under the hood. Once parsed, the source text is analyzed to determine the indentation and line endings. This information is then stored in an internal WeakMap.
MagicJSON.stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string
- This API has the same signature as
JSON.stringify(), which it calls under the hood. It uses the information stored by.parse()to revive the text with the same indentation (unless thespaceparameter is given) and line endings.
Notes
MagicJSON.stringify()works the same asJSON.stringify()ifvalueis not a MagicJSON object.- If
valueis a MagicJSON object andspaceis given, it overrides the detected indentation.
async MagicJSON.fromFile<T = any>(filepath: string): Promise<T>
- Reads some JSON text from a file and calls
.parse()on it.
async MagicJSON.write(value: any, filepath?: string): Promise<void>
- Calls
.stringify()and writes the result back to the same file the JSON text was loaded from, unless a differentfilepathis given.
Notes
- If
filepathis given, it overrides the path associated with the object.filepathis mandatory if eithervalueis not a MagicJSON object or it wasn't loaded with.fromFile().
MagicJSON.isMagic(value: any): boolean
- Returns
trueifvalueis a MagicJSON object,falseotherwise.
MagicJSON.isManaged(value: any): boolean
- Deprecated. Use
MagicJSON.isMagic(value)instead.
See releases.
MIT