自学内容网 自学内容网

【MySQL】MySQL中的函数之JSON_UNQUOTE

在 MySQL 中,JSON_UNQUOTE() 函数用于去除 JSON 值周围的双引号,并将其转换为普通的字符串或数值。这个函数特别适用于从 JSON 文档中提取的值,因为这些值通常会被包含在双引号中。

基本语法

JSON_UNQUOTE(json_value)
  • json_value: 要去引号的 JSON 值。

示例

假设有一个表 users,其中有一个字段 data 存储了用户的 JSON 数据:

CREATE TABLE users (
    id INT PRIMARY KEY,
    data JSON
);

INSERT INTO users (id, data) VALUES
(1, '{"name": "Alice", "age": 30, "city": "New York"}'),
(2, '{"name": "Bob", "age": 25, "city": "Los Angeles"}');
示例 1: 去除提取的字符串值的双引号
SELECT id, JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) AS name
FROM users;

输出结果:

+----+--------+
| id | name   |
+----+--------+
| 1  | Alice  |
| 2  | Bob    |
+----+--------+
示例 2: 去除提取的数值值的双引号
SELECT id, JSON_UNQUOTE(JSON_EXTRACT(data, '$.age')) AS age
FROM users;

输出结果:

+----+-----+
| id | age |
+----+-----+
| 1  | 30  |
| 2  | 25  |
+----+-----+
示例 3: 去除嵌套值的双引号

假设 JSON 数据中包含嵌套的对象:

INSERT INTO users (id, data) VALUES
(3, '{"name": "Charlie", "age": 35, "address": {"street": "123 Main St", "city": "Chicago"}}');

我们可以提取嵌套的街道地址并去除双引号:

SELECT id, JSON_UNQUOTE(JSON_EXTRACT(data, '$.address.street')) AS street
FROM users;

输出结果:

+----+-------------+
| id | street      |
+----+-------------+
| 1  | NULL        |
| 2  | NULL        |
| 3  | 123 Main St |
+----+-------------+
示例 4: 去除数组中的值的双引号

假设 JSON 数据中包含一个数组:

INSERT INTO users (id, data) VALUES
(4, '{"name": "David", "age": 40, "hobbies": ["reading", "traveling", "cooking"]}');

我们可以提取数组中的第一个爱好并去除双引号:

SELECT id, JSON_UNQUOTE(JSON_EXTRACT(data, '$.hobbies[0]')) AS hobby
FROM users;

输出结果:

+----+----------+
| id | hobby    |
+----+----------+
| 1  | NULL     |
| 2  | NULL     |
| 3  | NULL     |
| 4  | reading  |
+----+----------+

注意事项

  • JSON_UNQUOTE() 只会去除最外层的双引号。如果 JSON 值本身包含嵌套的双引号,这些嵌套的双引号不会被去除。
  • 如果 json_value 不是有效的 JSON 值,JSON_UNQUOTE() 将返回 NULL
  • 如果 json_value 本身就是 NULLJSON_UNQUOTE() 也将返回 NULL

组合使用

JSON_UNQUOTE() 通常与 JSON_EXTRACT() 一起使用,以便从 JSON 文档中提取值并将其转换为普通的数据类型。例如:

SELECT id, JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) AS name,
       JSON_UNQUOTE(JSON_EXTRACT(data, '$.age')) AS age,
       JSON_UNQUOTE(JSON_EXTRACT(data, '$.address.street')) AS street
FROM users;

输出结果:

+----+--------+-----+-------------+
| id | name   | age | street      |
+----+--------+-----+-------------+
| 1  | Alice  | 30  | NULL        |
| 2  | Bob    | 25  | NULL        |
| 3  | Charlie| 35  | 123 Main St |
| 4  | David  | 40  | NULL        |
+----+--------+-----+-------------+

原文地址:https://blog.csdn.net/stxyg/article/details/143721953

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!