root ::= object
value ::= object | array | string | number | ("true" | "false" | "null")
object ::=
"{" (
string ":" value
("," string ":" value)*
)? "}"
array ::=
"[" (
value
("," value)*
)? "]"
string ::=
"\"" (
[^"\\] |
"\\" (["\\/bfnrt] | "u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) # escapes
)* "\""
number ::= ("-"? ([0-9] | [1-9] [0-9]*)) ("." [0-9]+)? ([eE] [-+]? [0-9]+)?