DROP DATABASE IF EXISTS json_extract_db; CREATE DATABASE json_extract_db; USE json_extract_db; # ---------------------------------------------------------------------- # Test of JSON_EXTRACT function. # ---------------------------------------------------------------------- # Single path expression CREATE TABLE t1(j LONGTEXT, p LONGTEXT) ENGINE = COLUMNSTORE; SET @json = '[1, "val2", [3.1, -4]]'; INSERT INTO t1 VALUES (@json, '$[0]'); INSERT INTO t1 VALUES (@json, '$[1]'); INSERT INTO t1 VALUES (@json, '$[2]'); INSERT INTO t1 VALUES (@json, '$[3]'); INSERT INTO t1 VALUES (@json, '$[2][0]'); INSERT INTO t1 VALUES (@json, '$[2][1]'); INSERT INTO t1 VALUES (@json, '$[2][10]'); INSERT INTO t1 VALUES (@json, '$'); INSERT INTO t1 VALUES ('1', '$'); INSERT INTO t1 VALUES ('[10, 20, [30, 40], 1, 10]', '$[1]'); INSERT INTO t1 VALUES ('{"key1":"asd", "key2":[2,3]}', "$.key1"); INSERT INTO t1 VALUES ('{"key0":true, "key1":"qwe"}', "$.key1"); INSERT INTO t1 VALUES ('[10, 20, [30, 40]]', '$[2][*]'); INSERT INTO t1 VALUES ('[10, 20, [{"a":3}, 30, 40]]', '$[2][*]'); INSERT INTO t1 VALUES (json_object('foo', 'foobar'), '$'); SELECT j, p, JSON_EXTRACT(j, p) AS result FROM t1; j p result [1, "val2", [3.1, -4]] $[0] 1 [1, "val2", [3.1, -4]] $[1] "val2" [1, "val2", [3.1, -4]] $[2] [3.1, -4] [1, "val2", [3.1, -4]] $[3] NULL [1, "val2", [3.1, -4]] $[2][0] 3.1 [1, "val2", [3.1, -4]] $[2][1] -4 [1, "val2", [3.1, -4]] $[2][10] NULL [1, "val2", [3.1, -4]] $ [1, "val2", [3.1, -4]] 1 $ 1 [10, 20, [30, 40], 1, 10] $[1] 20 {"key1":"asd", "key2":[2,3]} $.key1 "asd" {"key0":true, "key1":"qwe"} $.key1 "qwe" [10, 20, [30, 40]] $[2][*] [30, 40] [10, 20, [{"a":3}, 30, 40]] $[2][*] [{"a": 3}, 30, 40] {"foo": "foobar"} $ {"foo": "foobar"} # Multiple path expression CREATE TABLE t2(j LONGTEXT, p1 LONGTEXT, p2 LONGTEXT) ENGINE = COLUMNSTORE; INSERT INTO t2 VALUES ('{"key1":"asd", "key2":[2,3]}', "$.keyX", "$.keyY"); INSERT INTO t2 VALUES ('{"key1":"asd", "key2":[2,3]}', "$.key1", "$.key2"); INSERT INTO t2 VALUES ('{"key1":5, "key2":[2,3]}', "$.key1", "$.key2"); INSERT INTO t2 VALUES ('[10, 20, [30, 40], 1, 10]', '$[1]', '$[25]'); INSERT INTO t2 VALUES ('[{"a": [3, 4]}, {"b": 2}]', '$[0].a', '$[1].a'); SELECT j, p1, p2, JSON_EXTRACT(j, p1, p2) AS result FROM t2; j p1 p2 result {"key1":"asd", "key2":[2,3]} $.keyX $.keyY NULL {"key1":"asd", "key2":[2,3]} $.key1 $.key2 ["asd", [2, 3]] {"key1":5, "key2":[2,3]} $.key1 $.key2 [5, [2, 3]] [10, 20, [30, 40], 1, 10] $[1] $[25] [20] [{"a": [3, 4]}, {"b": 2}] $[0].a $[1].a [[3, 4]] DROP TABLE t2; DROP TABLE t1; DROP DATABASE json_extract_db;