jordanbtucker / jsonext

An extention of JSON that supports Next gen features.
MIT License
8 stars 1 forks source link

JSONext

Build Status

An extention of JSON that supports Next gen features.

Usage

Node

npm install --save jsonext
const JSONext = require('jsonext')

Browser

Using the unpkg CDN.

<script src="https://unpkg.com/jsonext/dist/jsonext.js"></script>

Using npm.

npm install --save jsonext
<script src="https://github.com/jordanbtucker/jsonext/raw/master/node_modules/jsonext/dist/jsonext.js"></script>

Bower

JSONext is not registered with Bower because it requires committing generated files to the the Git repository, which is a bad thing.

API

The JSONext API is compatible with the JSON API.

JSONext.parse(text [, reviver])

Parses JSONext text into an ECMAScript value.

JSONext.stringify(value [, replacer [, space]])

Returns a string in JSONext format representing an ECMAScript value.

File extension

JSONext uses the file extension .jsonext. You can require JSONext files with the following:

// Register the .jsonext file extension.
require('jsonext/register')

// Load a JSONext file directly.
const config = require('./config.jsonext')

Current features

JSON5 syntax

{
    // comments
    unquoted: 'and you can quote me on that',
    singleQuotes: 'I can use "double quotes" here',
    lineBreaks: "Look, Mom!\
No \\n's!",
    hexadecimal: 0xdecaf,
    leadingDecimalPoint: .8675309, andTrailing: 8675309.,
    positiveSign: +1,
    trailingComma: 'in objects', andIn: ['arrays',],
    "backward compatible": "with JSON",
}

Infinity and NaN are supported for backward compatibility, but they are deprecated and produce warnings.

Unicode property names

Including unicode escapes. The following documents are equivalent.

{ ùńîċõďë: '¡ celebridad internacional !' }
{ \u00f9\u0144\u00ee\u010b\u00f5\u010f\u00eb: "¡ celebridad internacional !" }

Unicode code point escapes in strings

{ surrogatePairs: '\u{20BB7}' }

Hex escapes in strings

{ hexEscapes: 'No \x65\x73\x63\x61\x70\x65 from reality' }

Template literals without substitutions

{ templates: `Jane said, "It's great!"` }

The following document is invalid.

{ invalidTemplate: `Jane said, "${message}"` }