A minimal subset of JSON for machine-to-machine communication
Haskell Nix
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
diagrams
implementation
references
README.md
json.abnf
son.ebnf

README.md

Son

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

Number

  • No exponential notation
  • No trailing zeros in fractions
  • No negative zero
  • No positive sign

positiveInteger:

Positive Integer

fraction:

Fraction

Son Strings

String

  • 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:

shortcutEscape

Other Changes from JSON

  • No insignificant whitespace

Status

Unreleased. Like JSON, the intention is that once Son is released it will never change.

Specification

The formal part of its specification is ./son.ebnf. It uses the EBNF notation described here.

Additionally:

  • 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.

Implementations

Special Thanks

Differences between this and related projects

See here.

Notes

  • The diagrams were generated with GrammKit.

  • ./vendored/rfc7159.txt is from here.