MySQL JSON_VALUE() 函数使用指南
MySQL JSON_VALUE() 函数从一个指定的 JSON 文档中提取指定路径的值并返回。
JSON_VALUE() 语法
这里是 MySQL JSON_VALUE() 的语法:
JSON_VALUE(json, path [RETURNING type] [{NULL | ERROR | DEFAULT value} ON EMPTY] [{NULL | ERROR | DEFAULT value} ON ERROR])
参数
-
json必需的。一个 JSON 文档。
-
path必需的。一个路径表达式。
-
RETURNING type可选的。他决定了返回值的类型。您可以使用下面值中的一个:
FLOATDOUBLEDECIMALSIGNEDUNSIGNEDDATETIMEDATETIMEYEAR(MySQL 8.0.22 and later)CHARJSON
-
{NULL | ERROR | DEFAULT value} ON EMPTY可选的。如果指定了,它决定了指定路径下没有数据的返回值:
NULL ON EMPTY: 如果指定路径下没有数据,JSON_VALUE()函数将返回NULL,这是默认的行为。DEFAULT value ON EMPTY: 如果指定路径下没有数据,JSON_VALUE()函数将返回value。ERROR ON EMPTY: 如果指定路径下没有数据,JSON_VALUE()函数将抛出一个错误。
-
{NULL | ERROR | DEFAULT value} ON ERROR可选的。如果指定了,它决定了处理错误的逻辑:
NULL ON ERROR: 如果有错误,JSON_VALUE()函数将返回NULL,这是默认的行为。DEFAULT value ON ERROR: 如果有错误,JSON_VALUE()函数将返回value。ERROR ON ERROR: 如果有错误,JSON_VALUE()函数将抛出一个错误。
返回值
如果 JSON 文档在指定的路径上有值,JSON_VALUE() 函数返回路径上的数据。除非您使用 RETURNING type 子句,否则 JSON_VALUE() 函数默认将找到的数据作为字符串返回。
JSON_VALUE() 函数将在以下情况下返回错误:
- 如果参数
json不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用JSON_VALID()验证 JSON 文档的有效性。 - 如果参数
path不是有效的路径表达式, MySQL 将会给出错误。
JSON_VALUE() 示例
让我们先创建一个 JSON 文档以供以下的例子使用:
SET @json = '[
{
"name": "Tim",
"age": 20,
"amount": 123.456,
"note": "He is perfect."
},
{
"name": "Tom",
"age": 20,
"amount": 456.1
}
]';
这里, 我们创建了一个 JSON 数组,它包含两个用户信息。
返回第一个用户的年龄
SELECT JSON_VALUE(@json, '$[0].age');
+-------------------------------+
| JSON_VALUE(@json, '$[0].age') |
+-------------------------------+
| 20 |
+-------------------------------+返回第二个用户的金额
SELECT JSON_VALUE(@json, '$[1].amount');
+----------------------------------+
| JSON_VALUE(@json, '$[1].amount') |
+----------------------------------+
| 456.1 |
+----------------------------------+如果您想要返回的数据像第一位用户的金额那样具有 3 位小数位,您可以使用 RETURNING DECIMAL(10,3) 子句:
SELECT JSON_VALUE(@json, '$[1].amount' RETURNING DECIMAL(9,3));
+---------------------------------------------------------+
| JSON_VALUE(@json, '$[1].amount' RETURNING DECIMAL(9,3)) |
+---------------------------------------------------------+
| 456.100 |
+---------------------------------------------------------+默认值
如果指定的路径上没有数据,您可以使用 ON EMPTY 子句设定默认值:
SELECT
JSON_VALUE(@json, '$[0].note' DEFAULT 'Nothing' ON EMPTY) AS `$[0].note`,
JSON_VALUE(@json, '$[1].note' DEFAULT 'Nothing' ON EMPTY) AS `$[1].note`;
+----------------+-----------+
| $[0].note | $[1].note |
+----------------+-----------+
| He is perfect. | Nothing |
+----------------+-----------+