JSON_EXTRACT
是 MySQL 中的一个函数,用于从 JSON 文本中提取值。以下是 JSON_EXTRACT
的主要用途和特点:
- 提取 JSON 值:可以从 JSON 字符串中提取一个或多个值。
- 路径表达式:使用路径表达式来指定要提取的数据位置。路径表达式以美元符号
$
开头,后跟点.
或方括号[]
来指定路径。 - 返回类型:返回的结果类型取决于提取的值。如果提取的是单个值,返回类型通常是字符串或数字;如果提取的是多个值,返回类型是 JSON 数组。
示例
假设有一个表 users
,其中有一列 data
存储了 JSON 数据:
CREATE TABLE users (id INT PRIMARY KEY,data JSON
);INSERT INTO users (id, data) VALUES
(1, '{"name": "Alice", "age": 25, "address": {"city": "New York"}}'),
(2, '{"name": "Bob", "age": 30, "address": {"city": "Los Angeles"}}');
提取单个值
SELECT JSON_EXTRACT(data, '$.name') AS name FROM users;
结果:
name |
---|
“Alice” |
“Bob” |
提取嵌套值
SELECT SELECT JSON_EXTRACT(JSON_EXTRACT(data,'$.address'),'$.city') AS city FROM users;
注意:以下写法不好使:
SELECT JSON_EXTRACT(data, '$.address.city') AS city FROM users;
结果:
city |
---|
“New York” |
“Los Angeles” |
提取多个值
SELECT JSON_EXTRACT(data, '$.name', '$.age') AS name_age FROM users;
结果:
name_age |
---|
[“Alice”, 25] |
[“Bob”, 30] |
注意事项
- 如果路径表达式不匹配任何值,
JSON_EXTRACT
返回NULL
。 - 路径表达式中的键名必须用双引号
"
包围。 - 可以使用通配符
*
来匹配多个路径。 - 如果去掉返回结果的引号 使用
JSON_UNQUOTE
SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.name', '$.age')) AS name_age FROM users;