README.md
A subset of JSON.
JSON contains redundant syntax such as allowing both 10e2
and 10E2
. This helps when writing it by hand but isn't good for machine-to-machine communication. Piping JSON through multiple programs creates lots of trivial changes, which makes it hard to do things like take meaningful diffs.
Son is a subset of JSON without redundant options. It's intended for machine-to-machine communication by programs that want to follow Postel's Law -- they can accept normal JSON for flexibility and output Son for consistency.
Son Numbers
- No exponential notation
- No trailing zeros in fractions
- No negative zero
- No positive sign
positiveInteger:
fraction:
Son Strings
- No unnecessary escape sequences
JSON doesn't allow Unicode characters below codepoint x20 or unescaped "
and \
in strings. To allow these to still be encoded in JSON we've had to keep a few escape sequences. We use two-character escape sequences (e.g. \n
) when available, and six-character ones (e.g. \u0001
) when not.
shortcutEscape:
Other Changes from JSON
- No insignificant whitespace
Unreleased. Like JSON, the intention is that once Son is released it will never change.
The formal part of its specification is ./son.ebnf. It uses the EBNF notation described here.
Additionally: object keys must be unique. Object members must be sorted by lexicographic order of their keys.
See here.