自学内容网 自学内容网

【MySQL】MySQL中的函数之JSON_KEYS

在 MySQL 中,JSON_KEYS() 函数用于获取 JSON 对象中的所有键名。这个函数非常有用,特别是在你需要知道 JSON 对象中包含哪些键时。下面是一些关于如何使用 JSON_KEYS() 的详细说明和示例。

基本语法

JSON_KEYS(json_doc [, path])
  • json_doc: 要从中提取键名的 JSON 文档。
  • path: 可选参数,用于指定要提取键名的路径。如果省略,默认为根路径 "$"

示例

假设有一个表 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", "hobbies": ["reading", "traveling"]}');
示例 1: 获取 JSON 对象的所有键名
SELECT id, JSON_KEYS(data) AS keys
FROM users;

输出结果:

+----+-----------------------------------+
| id | keys                              |
+----+-----------------------------------+
| 1  | ["name", "age", "city"]           |
| 2  | ["name", "age", "city", "hobbies"]|
+----+-----------------------------------+
示例 2: 获取嵌套 JSON 对象的键名

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

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

我们可以提取嵌套对象 address 的键名:

SELECT id, JSON_KEYS(data, '$.address') AS address_keys
FROM users;

输出结果:

+----+---------------------+
| id | address_keys        |
+----+---------------------+
| 1  | NULL                |
| 2  | NULL                |
| 3  | ["street", "city"]  |
+----+---------------------+
示例 3: 获取 JSON 数组中的键名

假设 JSON 数据中包含一个数组,每个数组元素都是一个对象:

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

我们可以提取数组 hobbies 中每个对象的键名:

SELECT id, JSON_KEYS(data, '$.hobbies[*]') AS hobbies_keys
FROM users;

输出结果:

+----+-----------------------------------+
| id | hobbies_keys                      |
+----+-----------------------------------+
| 1  | NULL                              |
| 2  | NULL                              |
| 3  | NULL                              |
| 4  | [["type", "level"], ["type", "level"]] |
+----+-----------------------------------+

注意事项

  • JSON_KEYS() 返回的结果是一个 JSON 数组,包含所有的键名。
  • 如果路径表达式指向的值不是一个 JSON 对象,JSON_KEYS() 将返回 NULL
  • 如果路径表达式指向的值不存在,JSON_KEYS() 也将返回 NULL

组合使用

JSON_KEYS() 通常与其他 JSON 函数结合使用,以便更灵活地处理 JSON 数据。例如,你可以先使用 JSON_KEYS() 获取键名,然后使用 JSON_EXTRACT() 提取特定的值。

SELECT id, JSON_KEYS(data) AS keys, JSON_EXTRACT(data, '$.name') AS name
FROM users;

输出结果:

+----+-----------------------------------+--------+
| id | keys                              | name   |
+----+-----------------------------------+--------+
| 1  | ["name", "age", "city"]           | "Alice"|
| 2  | ["name", "age", "city", "hobbies"]| "Bob"  |
| 3  | ["name", "age", "address"]        | "Charlie"|
| 4  | ["name", "age", "hobbies"]        | "David"|
+----+-----------------------------------+--------+

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

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