JSON_KEYS()

JSON_KEYS() 以 JSON 数组形式返回 JSON 对象的顶层键,或在提供可选路径参数时从嵌套对象中返回键。如果任一参数为 NULL 或路径未指向 JSON 对象,则返回 NULL。

函数说明

JSON_KEYS() 从 JSON 对象中提取成员名称。不提供路径参数时,返回顶层对象的键。提供路径参数时,导航到嵌套对象并返回其键。

如果目标(文档本身或指定路径处的对象)不是 JSON 对象,函数返回 NULL。如果路径不匹配任何值,函数返回 NULL。如果任一参数为 NULL,函数返回 NULL

Syntax

> JSON_KEYS(json_doc [, path])

Arguments

参数

说明

json_doc

必填。一个 JSON 文档(字符串、JSON 列或 JSON 函数的结果)。

path

可选。指定嵌套对象的 JSON 路径表达式,用于返回其键。

Examples

DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;

-- 顶层键
SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}');

-- 通过路径获取嵌套对象
SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b');

-- 空对象
SELECT JSON_KEYS('{}');

-- 非对象输入返回 NULL
SELECT JSON_KEYS('[1,2,3]');
SELECT JSON_KEYS('"hello"');
SELECT JSON_KEYS('42');

-- 路径指向非对象返回 NULL
SELECT JSON_KEYS('{"a": [1,2,3]}', '$.a');

-- 路径不匹配返回 NULL
SELECT JSON_KEYS('{"a": 1}', '$.b');

-- NULL 参数
SELECT JSON_KEYS(NULL);
SELECT JSON_KEYS('{"a":1}', NULL);

-- 通过 JSON 函数
SELECT JSON_KEYS(JSON_OBJECT('a', 1, 'b', 2));

-- 表中使用 VARCHAR 列
CREATE TABLE t1 (a VARCHAR(100));
INSERT INTO t1 VALUES ('{"a":1,"b":2}'), ('[1,2]'), ('{}'), ('"hello"'), (NULL);
SELECT a, JSON_KEYS(a) FROM t1;

-- 表中使用 JSON 列
CREATE TABLE t2 (a JSON);
INSERT INTO t2 VALUES ('{"a":1,"b":2}'), ('[1,2]'), ('{}'), ('"hello"'), ('null');
SELECT a, JSON_KEYS(a) FROM t2;

DROP TABLE t1;
DROP TABLE t2;
DROP DATABASE dbfuncs;