A subset of JSON.
JSON contains redundant syntax such as allowing both
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.
- No exponential notation
- No trailing zeros in fractions
- No negative zero
- No positive sign
- No unnecessary escape sequences
JSON doesn't allow Unicode characters below codepoint x20 or unescaped
\ 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.
Other Changes from JSON
- No insignificant whitespace
Unreleased. Like JSON, the intention is that once Son is released it will never change.
The only valid byte encoding of Son is UTF-8. Byte order marks are forbidden.
Object keys must be unique.
Object members must be sorted by ascending lexicographic order of their keys.
- Haskell reference implementation: ./implementation.
@John-Nagle: UTF-8 should be the only allowed encoding.
Differences between this and related projects