Skip to content

Latest commit

 

History

History
134 lines (85 loc) · 2.05 KB

jsonspec.md

File metadata and controls

134 lines (85 loc) · 2.05 KB

JSON Spec

A valid JSON text must follow the grammar defined in RFC7159

Additional specifications used by json_ref that are extensions to the RFC7159 grammar are listed below.

File Encoding

  • Only utf-8 encoded are accepted
  • The byte order mark (BOM), "\uFEFF", is not allowed at the beginning of a JSON text
  • Raw non-unicode characters not accepted

Invalid JSON text

\uFEFF{"key0": 1}
{"key0": "\uFF"}

Object

duplicate key

Duplicate keys at the top level result in an error; however, duplicate keys nested at a lower level are ignored.

Invalid JSON text

{"key0": 1,"key0": 2}

Acceptable JSON text

{"key0": 1,"key1": {"key2":2,"key2":"10"}}

Numbers

Range

  • Only integers between 0 and 2^64-1 are accepted
  • All other values result in an error

Special Values

  • null, true, false are the only accepted special values.
  • other special values such as NaN,+Inf,-Inf are not accepted

Exponential Notation

Exponential notation is not accepted

Invalid JSON text

{"key": 1.2E-6}
{"key": 0.2E+8}
Hex values

Hex values are not accepted

Invalid JSON text

{"key0": 0x1}
{"key0": 0xFF}

Trailing Commas

Trailing commas are not accepted.

Invalid JSON text

{"key": 4160,,,}
{"key": "algo",,,}

Comment

Comment blocks are not accepted.

Invalid JSON text

{"key0": /*comment*/"algo"}
{"key0": [1,/*comment*/,3]}

White Spaces

  • space, tab(\t), new line(\n) and carriage return(\r) are allowed
  • form feed(\f) is not allowed

Escaped Characters

  • control chars (U+0000 - U+001F) must be escaped
  • surrogate pairs are accepted
  • escaped invalid characters are replaced by replacement character (U+FFFD)

Example

a valid surrogate pair

{"key0": "\uD801\udc37"}

replaced by U+FFFD

{"key0": "\uD800\uD800n"}