Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 2.97 KB

File metadata and controls

87 lines (63 loc) · 2.97 KB
  • 4 primitive types - strings, numbers, booleans, null
  • 2 containers - objects, arrays
  • string → sequence of unicode characters
  • object → unordered collection of zero or more name/value pairs
    • name → string
    • value → any valid json primitive and container type
  • array → ordered sequence of zero or more values
  • JSON-text = ws value ws

    These are the six structural characters:

    begin-array = ws %x5B ws ; [ left square bracket

    begin-object = ws %x7B ws ; { left curly bracket

    end-array = ws %x5D ws ; ] right square bracket

    end-object = ws %x7D ws ; } right curly bracket

    name-separator = ws %x3A ws ; : colon

    value-separator = ws %x2C ws ; , comma

    Insignificant whitespace is allowed before or after any of the six structural characters.

    ws = *( %x20 / ; Space %x09 / ; Horizontal tab %x0A / ; Line feed or New line %x0D ) ; Carriage return

  • value = false / null / true / object / array / number / string
  • object = begin-object [ member *( value-separator member ) ] end-object

    member = string name-separator value

  • array = begin-array [ value *( value-separator value ) ] end-array
  • number = [ minus ] int [ frac ] [ exp ]

    decimal-point = %x2E ; .

    digit1-9 = %x31-39 ; 1-9

    e = %x65 / %x45 ; e E

    exp = e [ minus / plus ] 1*DIGIT

    frac = decimal-point 1*DIGIT

    int = zero / ( digit1-9 *DIGIT )

    minus = %x2D ; -

    plus = %x2B ; +

    zero = %x30 ; 0

  • String: All Unicode characters may be placed within the quotation marks, except for the characters that MUST be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).

    string = quotation-mark *char quotation-mark

    char = unescaped / escape ( %x22 / ; ” quotation mark U+0022 %x5C / ; \ reverse solidus U+005C %x2F / ; / solidus U+002F %x62 / ; b backspace U+0008 %x66 / ; f form feed U+000C %x6E / ; n line feed U+000A %x72 / ; r carriage return U+000D %x74 / ; t tab U+0009 %x75 4HEXDIG ) ; uXXXX U+XXXX

    escape = %x5C ; \

    quotation-mark = %x22 ; ”

    unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

  • JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629].
  • Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings.