SELECT$$''$$::json;-- ERROR, single quotes are not allowed
SELECT'"abc"'::json;-- OK
SELECT'"abc'::json;-- ERROR, quotes not closed
SELECT'"abc
def"'::json; -- ERROR, unescaped newline in string constant
SELECT'"\n\"\\"'::json;-- OK, legal escapes
SELECT'"\v"'::json;-- ERROR, not a valid JSON escape
SELECT'"\u"'::json;-- ERROR, incomplete escape
SELECT'"\u00"'::json;-- ERROR, incomplete escape
SELECT'"\u000g"'::json;-- ERROR, g is not a hex digit
SELECT'"\u0000"'::json;-- OK, legal escape
SELECT'"\uaBcD"'::json;-- OK, uppercase and lower case both OK
-- Numbers.
SELECT'1'::json;-- OK
SELECT'0'::json;-- OK
SELECT'01'::json;-- ERROR, not valid according to JSON spec
SELECT'0.1'::json;-- OK
SELECT'9223372036854775808'::json;-- OK, even though it's too large for int8
SELECT'1e100'::json;-- OK
SELECT'1.3e100'::json;-- OK
SELECT'1f2'::json;-- ERROR
-- Arrays.
SELECT'[]'::json;-- OK
SELECT'[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::json;-- OK
SELECT'[1,2]'::json;-- OK
SELECT'[1,2,]'::json;-- ERROR, trailing comma
SELECT'[1,2'::json;-- ERROR, no closing bracket
SELECT'[1,[2]'::json;-- ERROR, no closing bracket
-- Objects.
SELECT'{}'::json;-- OK
SELECT'{"abc"}'::json;-- ERROR, no value
SELECT'{"abc":1}'::json;-- OK
SELECT'{1:"abc"}'::json;-- ERROR, keys must be strings