Are you frustrated that you cannot add comments into your configuration JSON
Relaxed JSON is a simple solution.
Small JavaScript library with only one exposed function RJSON.transform(text : string) : string
(and few convenient helpers).
Relaxed JSON (modified BSD license) is a strict superset of JSON,
relaxing strictness of vanilla JSON.
Valid, vanilla JSON will not be changed by RJSON.transform
. But there are few additional
features helping writing JSON by hand.
- Comments are stripped :
// foo
and/* bar */
→ - Trailing comma is allowed :
[1, 2, 3, ]
→[1, 2, 3]
. Works also in objects{ "foo": "bar", }
→{ "foo": "bar" }
. - Identifiers are transformed into strings :
{ foo: bar }
→{ "foo": "bar" }
. - Single quoted strings are allowed :
'say "Hello"'
→"say \"Hello\""
. - More different characters is supported in identifiers:
foo-bar
→"foo-bar"
.
RJSON.transform(text : string) : string
. Transforms Relaxed JSON text into JSON text. Doesn't verify (parse) the JSON, i.e result JSON might be invalid as wellRJSON.parse(text : string, reviver : function | opts : obj) : obj
. Parse the RJSON text, virtuallyJSON.parse(JSON.transform(text), reviver)
. You could pass a reviver function or an options object as the second argument. Supported options:reviver
: you could still pass a reviverrelaxed
: use relaxed version of JSON (default: true)warnings
: use relaxed JSON own parser, supports better error messages (default: false)tolerant
: wait until the end to throw errorsduplicate
: fail if there are duplicate keys in objects
There is rjson
executable†
$ sudo npm install -g relaxed-json
$ rjson relaxed-json.js
Error on line 27: Unexpected character: (
(function () {
% rjson package.json
{
"name": "relaxed-json",
"description": "Relaxed JSON is strict superset JSON, relaxing strictness of valilla JSON",
†rjson
is similar to python -mjson.tool
.
- 1.0.1 — 2017-03-08 — Meteor compatibility
- 1.0.0 — 2015-07-13 — Stable release
- Forward slashes bug fixed
- 0.2.9 Dependencies bump
- 0.2.8 Dev dependencies update
- 0.2.7
rjson
executable- also depedencies update
- jscs style check
- 0.2.6 Dependencies update
- 0.2.5 Use
make
- 0.2.4 Maintenance release
- 0.2.3 Bugfixes
$
is valid identifier character- single line comments may end with
CR
andCRLF
also
- 0.2.2 Bugfix
- 0.2.1 Code reogranization
- More though into toleration, handles valid json without colons and commas
- trailing comma stripping is more strict
- 0.2.0 Shiny new features
- overloaded
rjson.parse
- tolerating parser support
- duplicate key warning
- test suite (!)
- overloaded
- 0.1.1 RJSON.parse
- 0.1.0 Initial release
For truly human writable configuration consider using YAML.