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 对象。