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.
// foo
and /* bar */
→
.
Comments are converted into whitespace, so your formatting is preserved.[1, 2, 3, ]
→ [1, 2, 3]
. Works also in objects { "foo": "bar", }
→ { "foo": "bar" }
.{ foo: bar }
→ { "foo": "bar" }
.'say "Hello"'
→ "say \"Hello\""
.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, virtually JSON.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 objectsThere 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
.
rjson
executable
make
$
is valid identifier characterCR
and CRLF
alsorjson.parse
For truly human writable configuration consider using YAML.