跳到主要内容

JSON 数据类型转换

seekdb 支持使用 CAST 函数实现其他类型的数据和 JSON 数据类型的相互转换。

JSON 数据类型的转换规则如下表所示。

其他数据类型CAST(other_type AS JSON)CAST(JSON AS other_type)
JSON没有变化没有变化
utf8 字符类型 (包括 utf8mb4、utf8 和 ascii)字符被转换为 JSON 类型值,并验证合法性。序列化成 utf8mb4 字符串。
其他字符集类型首先转换成为 utf8mb4 字符编码,之后再按照 utf8 字符类型的描述进行转换。首先序列化成 utf8mb4 编码的字符串,之后再转换成对应字符集的字符串。
NULL返回空 JSON 类型值。不适用
其他类型只有单个的标量值会被转换为一个只具备单独值的 JSON 类型值。如果 JSON 类型值只包含一个标量值,并且与目标类型吻合,则会被转换为对应的类型,否则返回 NULL,并告警。
信息

other_type 指定除 JSON 外的其它数据类型。

如下为一些转换示例。

obclient> SELECT CAST("123" AS JSON);
+---------------------+
| CAST("123" AS JSON) |
+---------------------+
| 123 |
+---------------------+
1 row in set

obclient> SELECT CAST(null AS JSON);
+--------------------+
| CAST(null AS JSON) |
+--------------------+
| NULL |
+--------------------+
1 row in set

CREATE TABLE tj1 (c1 JSON,c2 VARCHAR(20));
INSERT INTO tj1 VALUES ('{"id": 17, "color": "red"}','apple'),('{"id": 18, "color": "yellow"}', 'banana'),('{"id": 16, "color": "orange"}','orange');
obclient> SELECT * FROM tj1 ORDER BY CAST(JSON_EXTRACT(c1, '$.id') AS UNSIGNED);
+-------------------------------+--------+
| c1 | c2 |
+-------------------------------+--------+
| {"id": 16, "color": "orange"} | orange |
| {"id": 17, "color": "red"} | apple |
| {"id": 18, "color": "yellow"} | banana |
+-------------------------------+--------+
3 rows in set