Oracle JSON_OBJECT() 函数使用指南
Oracle JSON_OBJECT()
是一个内置函数,它返回一个包含由参数指定的所有键值对儿的 JSON 对象。
Oracle JSON_OBJECT()
语法
这里是 Oracle JSON_OBJECT()
函数的语法:
JSON_OBJECT
( [ {[ KEY ] key_expr VALUE val_expr | expr [ ":" expr} [ FORMAT JSON ]
,]...
[ JSON_on_null_clause ] [ JSON_returning_clause ]
[ STRICT ]
[ WITH UNIQUE KEYS ] )
参数
key_expr
-
必需的。它使用区分大小写文本字面量指定属性键名。
val_expr
-
必需的。它指定属性的值。您可以指定任何求值为 SQL 数值文字、文本文字、日期或时间戳的表达式。日期和时间戳数据类型在生成的 JSON 对象或数组中以 JSON 字符串形式按照 ISO 日期格式打印。如果
expr
求值为数值文字,则生成的属性值为 JSON 数字值;否则,生成的属性值为用双引号括起来的区分大小写的 JSON 字符串值。 FORMAT JSON
-
可选的。您可以指定
FORMAT JSON
,以指示输入字符串是 JSON,并且因此不会在输出中引用。 JSON_on_null_clause
-
可选的。您可以使用此子句指定当
expr
求值为 null 时此函数的行为。您可以使用以下两个子句:NULL ON NULL
- 如果指定此子句,则函数返回 JSON null 值。ABSENT ON NULL
- 如果指定此子句,则函数从 JSON 数组中省略该值。这是默认值。
JSON_returning_clause
-
可选的。 您可以使用此子句指定返回值的类型。请使用以下值中的一个:
VARCHAR2
,指定大小为字节或字符数。默认是字节。如果省略此子句或指定没有指定size
值的子句,则JSON_ARRAY
返回一个类型为VARCHAR2(4000)
的字符字符串。请注意,在 SQL 的其他位置指定VARCHAR2
数据类型时,您需要指定一个大小。但是,在JSON_returning_clause
中,您可以省略大小。CLOB
,以返回包含单字节或多字节字符的字符大对象。BLOB
,以返回AL32UTF8
字符集的二进制大对象。
STRICT
-
可选的。指定
STRICT
子句以验证 JSON 生成函数的输出是否为正确的 JSON。如果检查失败,则会引发语法错误。 WITH UNIQUE KEYS
-
可选的。它保证生成的 JSON 对象具有唯一的键。
返回值
Oracle JSON_OBJECT()
函数返回一个 JSON 对象,其成员为参数指定的键值对。
Oracle JSON_OBJECT()
示例
这里有几个展示了 Oracle JSON_OBJECT()
函数用法的示例。
基本用法
下面的语句展示了 Oracle JSON_OBJECT()
函数的基本用法:
SELECT JSON_OBJECT(KEY 'name' VALUE 'Tim', KEY 'age' VALUE 20) Result
FROM dual;
输出:
RESULT
__________________________
{"name":"Tim","age":20}
您可以使用冒号来分隔 JSON_OBJECT
条目。
SELECT JSON_OBJECT('name' : 'Tim', 'age' : 20) Result
FROM dual;
输出:
RESULT
__________________________
{"name":"Tim","age":20}
FORMAT JSON
下面的示例将一个 JSON 数组和一个 JSON 对象作为输入参数:
SELECT JSON_OBJECT('a' : '[1,2]', 'b' : '{"x":1}') Result
FROM dual;
输出:
RESULT
________________________________
{"a":"[1,2]","b":"{\"x\":1}"}
您发现他们都被引用起来,这并不是您希望的样子。 您可以使用 FORMAT JSON
子句解决这个问题:
SELECT JSON_OBJECT(
'a' : '[1,2]' FORMAT JSON,
'b' : '{"x":1}' FORMAT JSON) Result
FROM dual;
输出:
RESULT
__________________________
{"a":[1,2],"b":{"x":1}}
将行转为 JSON 对象
如果您有一个具有如下行的 test
表:
SELECT * FROM test;
输出:
X
____
a
b
您可以使用通配符将表中的每个行转为一个 JSON 对象:
SELECT JSON_OBJECT(*) Result
FROM test;
输出:
RESULT
____________
{"X":"a"}
{"X":"b"}
结论
Oracle JSON_OBJECT()
是一个内置函数,它返回一个包含由参数指定的所有键值对儿的 JSON 对象。