首批通过分布式安全可靠测评,为关键业务系统打造
JSON_OBJECT
更新时间:2026-02-11 13:55:00
描述
对于 SQL 输入的一系列 key-value 对,JSON_OBJECT() 函数将其转换成一个 JSON 格式的对象,包含了前面输入的所有 key-value 对。
语法
JSON_OBJECT([KEY]'key_name': value_expr FORMAT JSON,
'key_name' VALUE value_expr
[ABSENT|NULL ON NULL,]
[RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size],]
[STRICT,]
[WITH UNIQUE KEYS]);
语法说明
JSON_OBJECT() 函数语法说明如下:
- key-value 对的输入形式如下:
- 'key_name' : value_expression
- 'key_name' : "value_string"
- 'key_name' VALUE value_expression
- 'key_name' VALUE 'value_string'
- column_name_x
- table_alias.*
其中前四种形式表示 key-value 对是通过 KEY : VALUE 来界定;第五种形式的输入只有一个列名,列名称就是 key_name, 列的内容就是 Value;第六种形式是通配符“*”的使用,表示该表的所有列都是输入,相当于这表的所有列都是用第五种的方式写了一遍。
FORMAT JSON:声明该参数产生的值是 JSON 数据,因此不会在输出中存在引用('"')。NULL|ABSENT ON NULL:仅当参数表达式的计算结果是NULL的时候生效。NULL ON NULL表示将 JSONNULL值用作给定键的值。ABSENT ON NULL表示将忽略该参数。
WITH UNIQUE KEYS:用以限制计算结果中不能包含重复的 Key。STRICT:用以验证输出结果是合法的 JSON 格式的数据。RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size]:用以指定返回值类型,其中VARCHAR2[size]可以限制返回值的长度。
示例
# 入参是(a), (b)的场景
SELECT JSON_OBJECT(
'name' : first_name || ' ' || last_name,
'email' : email,
'phone' : phone_number,
'hire_date' : hire_date
)
FROM employees
WHERE employee_id = 140;
# 入参是(f)的场景,使用通配符
SELECT JSON_OBJECT(*) FROM employees WHERE employee_id = 140;
---------------------------------------------------------------------
{
"EMPLOYEE_ID":140,
"FIRST_NAME":"Joshua",
"LAST_NAME":"Patel",
"EMAIL":"JPATEL",
"PHONE_NUMBER":"650.121.1834",
"HIRE_DATE":"2006-04-06T00:00:00",
"JOB_ID":"ST_CLERK",
"SALARY":2500,
"COMMISSION_PCT":null,
"MANAGER_ID":123,"DEPARTMENT_ID":50
}
# 入参是(c), (d)的场景
SELECT JSON_OBJECT('NAME' VALUE first_name, d.*)
FROM employees e, departments d
WHERE e.department_id = d.department_id AND e.employee_id =140
# 使用 FORMAT JSON 子句
SELECT JSON_OBJECT ('name' value 'Foo') FROM DUAL;
+-------------------------------+
| JSON_OBJECT('NAME'VALUE'FOO') |
+-------------------------------+
| {"name":"Foo"} |
+-------------------------------+
# 场景(a), (b) 使用关键字 KEY VALUE
SELECT JSON_OBJECT (
KEY 'deptno' VALUE d.department_id,
KEY 'deptname' VALUE d.department_name
) "Department Objects"
FROM departments d
ORDER BY d.department_id;
Department Objects
----------------------------------------
{"deptno":10,"deptname":"Administration"}
{"deptno":20,"deptname":"Marketing"}
{"deptno":30,"deptname":"Purchasing"}
{"deptno":40,"deptname":"Human Resources"}
{"deptno":50,"deptname":"Shipping"}
# 入参(1),(2)
SELECT JSON_OBJECT(
'first_name' VALUE first_name,
'last_name' VALUE last_name,
'email' VALUE email,
'hire_date' VALUE hire_date
)
FROM employees
WHERE employee_id = 140;
---------------------------------------------------------------------------
{
"first_name":"Joshua",
"last_name":"Patel",
"email":"JPATEL",
"hire_date":"2006-04-06T00:00:00"
}