JSON_VALUE
描述
该函数从指定路径中提取 JSON 文档中的值,并返回提取的值,还可以选择将其转换为所需数据类型。
语法
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
说明
参数解释
相关参数解释如下:
-
json_doc参数指定有效的 JSON 文档。 -
path参数是指向文档中某个位置的 JSON 路径,必须是字符串。 -
type参数是支持如下数据类型:-
FLOAT -
DOUBLE -
DECIMAL -
SIGNED -
UNSIGNED -
DATE -
TIME -
DATETIME -
YEAR(不支持YEAR(1)和YEAR(2)) -
CHAR -
JSON
-
-
如果没有使用
RETURNING子句,则该函数的返回类型为VARCHAR(512)。 当没有为返回类型指定字符集时,JSON_VALUE()使用 utf8mb4 和二进制排序规则,并区分大小写; 如果将 utf8mb4 指定为结果的字符集,则服务器使用此字符集的默认排序规则,不用区分大小写。 -
当在指定路径中未找到数据时,
on_empty子句用于指定JSON_VALUE()的行为。该子句取值如下:-
NULL ON EMPTY:JSON_VALUE()返回NULL。这是ON EMPTY的默认行为。 -
DEFAULT value ON EMPTY':返回所提供的value值,该值的类型必须与返回类型相匹配。 -
ERROR ON EMPTY:函数抛出错误。
-
-
当发生错误时,
on_error取值如下:-
NULL ON ERROR:JSON_VALUE()返回NULL;如果未使用ON ERROR子句,则这是默认行为。 -
DEFAULT value ON ERROR:返回所提供的value值,该值的类型必须与返回类型的值相匹配。 -
ERROR ON ERROR:抛出错误。
提示ON EMPTY的位置(如果使用)必须在所有ON ERROR子句之前,错误的顺序会导致语法错误。 -
错误处理
通常,JSON_VALUE() 会检查所有 JSON 输入(文档和路径)的有效性。如果其中任何一个为无效,则会抛出 SQL 错误,而不触发 ON ERROR 子句。
如果发生以下某一事件,就会触发 ON ERROR:
-
尝试提取对象或数组时,输入的路径在 JSON 文档中被解析为多个路径。
-
转换错误。例如,尝试将
'asdf'转换为UNSIGNED值。 -
数据截断。
即使指定了 NULL ON ERROR 或 DEFAULT ... ON ERROR,转换错误总是会触发告警。
当源 JSON 文档 (json_doc) 在指定位置(path)不包含任何数据时,会触发 ON EMPTY 子句。
示例
SELECT JSON_VALUE('{"fname": "Smith", "lname": "Will"}', '$.fname');
+--------------------------------------------------------------+
| JSON_VALUE('{"fname": "Smith", "lname": "Will"}', '$.fname') |
+--------------------------------------------------------------+
| Smith |
+--------------------------------------------------------------+
1 row in set (0.001 sec)
SELECT JSON_VALUE('{"item": "shoes", "price": "69.73"}', '$.price'
RETURNING DECIMAL(4,2)) AS price;
+-------+
| price |
+-------+
| 69.73 |
+-------+
1 row in set (0.001 sec)