json5-writer

    0.2.0 • Public • Published

    json5-writer

    Comment-preserving JSON / JSON5 parser

    json5-writer provides an API for parsing JSON and JSON5 without losing comments or formatting. It does so by transforming JSON5 into a JavaScript AST and using jscodeshift to update values.

    Example

    const json5Writer = require('json5-writer')
    const config = fs.readFileSync('config.json5', 'utf-8')
    const writer = json5Writer.load(config)
    writer.write({
      'eat honey': { cooldown: 3 },
      speak: { cooldown: 2 },
      bear: { actions: ['eat honey', 'speak'] },
    })
    fs.writeFileSync('config.json5', writer.toSource(), 'utf-8')

    config.json5 diff

     {
       // actions
       'eat honey': {
    -    cooldown: 4,
    +    cooldown: 3,
       },
    + 
    +  'speak': {
    +    cooldown: 2,
    +  },
     
       // Note: A day without a friend is like a pot without a single drop of honey left inside.
     
       // entities
       'bear':  {
    -    actions: [ 'eat honey' ],
    -    canSpeak: true,
    +    actions: ['eat honey', 'speak'],
       },
     }

    Installation

    npm install --save json5-writer

    Usage

    const writerInstance = json5Writer.load(jsonStr) // get a writer instance for the given JSON / JSON5 string
    writerInstance.write(objectOrArray) // update jsonStr, preserving comments
    const ast = writerInstance.ast // directly access the AST with jscodeshift API
    const newJson5 = writerInstance.toSource(options) // get the modified JSON5 string
    const newJson = writerInstance.toJSON(options) // get the modified JSON string

    .write(value)

    Updates the JSON / JSON5 string with the new value. Any field or property that doesn't exist in value is removed.

    To keep an existing value, use undefined:

    const writer = json5Writer.load(`[{ name: 'Noah' }, { name: 'Nancy' }]`)
    writer.write([{ name: undefined, age: 28 }, undefined ])
    write.toSource() // [{ name: 'Noah', age: 28 }, { name: 'Nancy' }]

    .ast

    Directly access the JSON5-turned-JavaScript AST, wrapped in the jscodeshift API.

    const j = require('jscodeshift')
    const writer = json5Writer.load('[1, 2, 3, 4]')
    writer.ast.find(j.Literal).forEach(path => {
      if (path.value.value % 2 === 0) path.value.value = 0
    })
    write.toSource() // [1, 0, 3, 0]

    .toSource(options)

    Get the modified JSON5 string. Alias for .toJSON5().

    options control what is output. By default, single quotes and trailing commas are enabled and key quote usage is inferred.

    .toSource({ quote: 'single', trailingComma: true, quoteKeys: undefined })
    • quoteKeys controls whether object keys are quoted. It can have three different values:
      • false - no object keys will have quotes
      • true - all object keys will have quotes
      • undefined - object key quote usage is inferred [default]
    • quote can be either single or double

    View the remaining options here.

    .toJSON(options)

    Same as .toSource(options) but with quote: 'double', trailingComma: false, quoteKeys: true by default.

    Install

    npm i json5-writer

    DownloadsWeekly Downloads

    31,108

    Version

    0.2.0

    License

    ISC

    Unpacked Size

    14.2 kB

    Total Files

    6

    Last publish

    Collaborators

    • noahsug