JSON_OBJECT

JON_OBJECT 函数使用指定的 key: value 对生成 JSON 对象。 如果未提供 key: value 对,那么将返回空对象。

读取语法图跳过可视语法图JSON_OBJECT(,KEYkey-name-expressionVALUEJSON 表达式key-name-expression : JSON 表达式FORMAT JSONFORMAT BSONNULL ON NULLABSENT ON NULLWITHOUT UNIQUE KEYSWITH UNIQUE KEYS RETURNINGCLOB (2G) CCSID 1208FORMAT JSONRETURNING数据类型FORMAT JSONENCODING UTF8ENCODING UTF16 FORMAT BSON )
数据类型
读取语法图跳过可视语法图CHARACTERCHAR(1)(整数)CHARACTERCHARVARYINGVARCHAR(整数)FOR SBCS DATAFOR MIXED DATAccsid-子句CHARACTERCHARLARGE OBJECTCLOB(1M)(整数KMG)FOR SBCS DATAFOR MIXED DATAccsid-子句GRAPHIC(1)(整数)GRAPHIC VARYINGVARGRAPHIC(整数)DBCLOB(1M)(整数KMG)ccsid-子句NATIONAL CHARACTERNATIONAL CHARNCHAR(1)(整数)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(整数)NATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(整数KMG)Normalize-子句BINARY(1)(整数)BINARY VARYINGVARBINARY(整数)BINARY LARGE OBJECTBLOB(1M)(整数KMG)
ccsid-子句
读取语法图跳过可视语法图CCSID整数Normalize-子句
normalize-子句
读取语法图跳过可视语法图NOT NORMALIZEDNORMALIZED
key-name-expression
JSON 密钥的名称。 名称不得为空。 使用冒号格式定义 key: value 对时, key-name-expression 必须是字符串文字。 否则, key-name-expression 的结果必须是内置字符或图形字符串数据类型。 它不能是 CHAR 或 VARCHAR 位数据。
JSON 表达式
用于生成与 key-name-expression关联的 JSON 值的表达式。 此表达式的结果类型可以是除 XML , ROWID 或 DATALINK 以外的任何内置数据类型。 它不能是 CHAR 或 VARCHAR 位数据。 它不能是源自任何这些数据类型的用户定义的类型。
FORMAT JSON 或 FORMAT BSON
指定 JSON-expression 是否已格式化数据。
格式 JSON
JSON-expression 将格式化为 JSON 数据。 如果 JSON-expression 是字符或图形字符串数据类型,那么会将其视为 JSON 数据。 如果 JSON-expression 是二进制字符串数据类型,那么会将其解释为 UTF-8 或 UTF-16 数据。
格式 Bson
JSON-expression 格式化为 JSON 数据的 BSON 表示,并且必须是二进制字符串数据类型。
如果既未指定 FORMAT JSON ,也未指定 FORMAT BSON:
  • 如果 JSON-expression 是其中一个内置函数 JSON_ARRAY , JSON_OBJECT , JSON_QUERY , JSON_ARRAYAGG 或 JSON_OBJECTAGG ,那么该函数的退回子句的显式或隐式 FORMAT 值将确定 JSON-expression的格式。
  • 如果 JSON-expression 是二进制字符串类型,那么会将其解释为 FORMAT BSON。
  • 否则,会将 JSON-expression 视为无格式数据。 如果生成的值不是数字,那么将使用括在引号内的字符串来构造结果字符串,并且将对任何特殊字符进行转义。 不是有效 JSON 数字 (例如 INFINITY 或 NAN) 的数字值将导致错误。
NULL ON NULL 或 ABSENT ON NULL
指定当 JSON-expression 为空值时要返回的内容。
NULL ON NULL
送回空值。 这是缺省情况。
空的 ABSENT
JSON 对象中省略了 key: value 对。
不带唯一键或 WITH UNIQUE KEYS
指定生成的 JSON 对象的键值是否必须唯一。
没有唯一键
将不会检查生成的 JSON 对象是否存在重复键。 这是缺省情况。
使用唯一键
生成的 JSON 对象需要具有唯一键值。 如果生成了重复的密钥,那么将发出错误。
生成具有唯一键的 JSON 对象被视为最佳实践。 如果 key-name-expression 生成唯一键名称,请省略 WITH UNIQUE KEYS 以提高性能。
正在返回 数据类型
指定结果的格式。
数据类型
结果的数据类型。 对于 CHAR 和 VARCHAR 结果, CCSID 不能为 65535。 缺省值为 CLOB (2G) CCSID 1208。

如果指定了 CCSID 并且 data-type 是 GRAPHIC , VARGRAPHIC 或 DBCLOB ,那么 CCSID 必须是 Unicode CCSID。

如果未指定 CCSID 属性,那么将按照 CAST 规范中的描述来确定 CCSID。

格式 JSON
JSON 数据作为 JSON 字符串返回。
ENCODING $TAG1 UTF8 $TAG2 或 ENCODING UTF16
data-type 是二进制字符串类型时要使用的编码。 此子句仅允许用于二进制字符串类型。 二进制字符串的缺省值为 UTF8。
格式 Bson
将以 BSON 格式返回 JSON 数据。 指定 FORMAT BSON 时, data-type 必须是 VARBINARY 或 BLOB 字符串类型。

示例

  • 生成名称的 JSON 对象。
    VALUES (JSON_OBJECT(KEY 'first' VALUE 'John', KEY 'last' VALUE 'Doe'));
    
    VALUES (JSON_OBJECT('first' : 'John', 'last' : 'Doe'));
    其中任一语句的结果都是以下 JSON 字符串:
    {"first":"John","last":"Doe"}
  • 生成一个 JSON 对象,其中包含员工编号为 "000020" 的员工的姓氏,雇佣日期和工资。
    SELECT JSON_OBJECT(
                   'Last name' : LASTNAME,
                   'Hire date' : HIREDATE,
                   'Salary'    : SALARY) 
    FROM EMPLOYEE
    WHERE EMPNO  = '000020';
    此语句的结果是以下 JSON 字符串:
    {"Last name":"THOMPSON","Hire date":"1973-10-10","Salary":41250.00}