WHITESPACE = _{ " " | "\t" | "\r" | "\n" } object = { "{" ~ "}" | "{" ~ pair ~ ("," ~ pair)* ~ "}" } pair = { string ~ ":" ~ value } array = { "[" ~ "]" | "[" ~ value ~ ("," ~ value)* ~ "]" } value = _{ object | array | string | number | boolean | null } boolean = { "true" | "false" } null = { "null" } string = ${ "\"" ~ inner ~ "\"" } inner = @{ char* } char = { !("\"" | "\\") ~ ANY | "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t") | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4}) } number = @{ "-"? ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*) ~ ("." ~ ASCII_DIGIT*)? ~ (^"e" ~ ("+" | "-")? ~ ASCII_DIGIT+)? } json = _{ SOI ~ (object | array) ~ EOI }