@@ -42,36 +42,7 @@ LINE 1: SELECT '"\v"'::json;
42
42
^
43
43
DETAIL: Escape sequence "\v" is invalid.
44
44
CONTEXT: JSON data, line 1: "\v...
45
- SELECT '"\u"'::json; -- ERROR, incomplete escape
46
- ERROR: invalid input syntax for type json
47
- LINE 1: SELECT '"\u"'::json;
48
- ^
49
- DETAIL: "\u" must be followed by four hexadecimal digits.
50
- CONTEXT: JSON data, line 1: "\u"
51
- SELECT '"\u00"'::json; -- ERROR, incomplete escape
52
- ERROR: invalid input syntax for type json
53
- LINE 1: SELECT '"\u00"'::json;
54
- ^
55
- DETAIL: "\u" must be followed by four hexadecimal digits.
56
- CONTEXT: JSON data, line 1: "\u00"
57
- SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit
58
- ERROR: invalid input syntax for type json
59
- LINE 1: SELECT '"\u000g"'::json;
60
- ^
61
- DETAIL: "\u" must be followed by four hexadecimal digits.
62
- CONTEXT: JSON data, line 1: "\u000g...
63
- SELECT '"\u0000"'::json; -- OK, legal escape
64
- json
65
- ----------
66
- "\u0000"
67
- (1 row)
68
-
69
- SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK
70
- json
71
- ----------
72
- "\uaBcD"
73
- (1 row)
74
-
45
+ -- see json_encoding test for input with unicode escapes
75
46
-- Numbers.
76
47
SELECT '1'::json; -- OK
77
48
json
@@ -1419,88 +1390,6 @@ select * from json_populate_recordset(row('def',99,null)::jpop,'[{"a":[100,200,3
1419
1390
{"z":true} | 3 | Fri Jan 20 10:42:53 2012
1420
1391
(2 rows)
1421
1392
1422
- -- handling of unicode surrogate pairs
1423
- select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8;
1424
- correct_in_utf8
1425
- ----------------------------
1426
- "\ud83d\ude04\ud83d\udc36"
1427
- (1 row)
1428
-
1429
- select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
1430
- ERROR: invalid input syntax for type json
1431
- DETAIL: Unicode high surrogate must not follow a high surrogate.
1432
- CONTEXT: JSON data, line 1: { "a":...
1433
- select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
1434
- ERROR: invalid input syntax for type json
1435
- DETAIL: Unicode low surrogate must follow a high surrogate.
1436
- CONTEXT: JSON data, line 1: { "a":...
1437
- select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
1438
- ERROR: invalid input syntax for type json
1439
- DETAIL: Unicode low surrogate must follow a high surrogate.
1440
- CONTEXT: JSON data, line 1: { "a":...
1441
- select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
1442
- ERROR: invalid input syntax for type json
1443
- DETAIL: Unicode low surrogate must follow a high surrogate.
1444
- CONTEXT: JSON data, line 1: { "a":...
1445
- --handling of simple unicode escapes
1446
- select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8;
1447
- correct_in_utf8
1448
- ---------------------------------------
1449
- { "a": "the Copyright \u00a9 sign" }
1450
- (1 row)
1451
-
1452
- select json '{ "a": "dollar \u0024 character" }' as correct_everywhere;
1453
- correct_everywhere
1454
- -------------------------------------
1455
- { "a": "dollar \u0024 character" }
1456
- (1 row)
1457
-
1458
- select json '{ "a": "dollar \\u0024 character" }' as not_an_escape;
1459
- not_an_escape
1460
- --------------------------------------
1461
- { "a": "dollar \\u0024 character" }
1462
- (1 row)
1463
-
1464
- select json '{ "a": "null \u0000 escape" }' as not_unescaped;
1465
- not_unescaped
1466
- --------------------------------
1467
- { "a": "null \u0000 escape" }
1468
- (1 row)
1469
-
1470
- select json '{ "a": "null \\u0000 escape" }' as not_an_escape;
1471
- not_an_escape
1472
- ---------------------------------
1473
- { "a": "null \\u0000 escape" }
1474
- (1 row)
1475
-
1476
- select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8;
1477
- correct_in_utf8
1478
- ----------------------
1479
- the Copyright © sign
1480
- (1 row)
1481
-
1482
- select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere;
1483
- correct_everywhere
1484
- --------------------
1485
- dollar $ character
1486
- (1 row)
1487
-
1488
- select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape;
1489
- not_an_escape
1490
- -------------------------
1491
- dollar \u0024 character
1492
- (1 row)
1493
-
1494
- select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
1495
- ERROR: unsupported Unicode escape sequence
1496
- DETAIL: \u0000 cannot be converted to text.
1497
- CONTEXT: JSON data, line 1: { "a":...
1498
- select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape;
1499
- not_an_escape
1500
- --------------------
1501
- null \u0000 escape
1502
- (1 row)
1503
-
1504
1393
--json_typeof() function
1505
1394
select value, json_typeof(value)
1506
1395
from (values (json '123.4'),
0 commit comments