JSON_QUERY

JSON_QUERY 函数使用 SQL/JSON 路径表达式从指定的 JSON 文本返回 SQL/JSON 值。

读取语法图跳过可视语法图JSON_QUERY( JSON 表达式FORMAT JSONFORMAT BSON ,sql-json-path-expression AS路径名 RETURNINGCLOB (2G) CCSID 1208FORMAT JSONRETURNING数据类型FORMAT JSONENCODING UTF8ENCODING UTF16 FORMAT BSONWITHOUTARRAYWRAPPERWITHUNCONDITIONALCONDITIONALARRAYWRAPPERKEEP QUOTESON SCALAR STRINGOMIT QUOTESON SCALAR STRING NULL ON EMPTYERROREMPTY ARRAYEMPTY OBJECTON EMPTY NULL ON ERRORERROREMPTY ARRAYEMPTY OBJECTON ERROR )
数据类型
读取语法图跳过可视语法图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
JSON 表达式
返回内置字符串数据类型的值的表达式。 如果返回字符或图形值,那么它必须包含格式正确的 JSON 数据。 如果它是二进制数据类型,那么将根据显式或隐式 FORMAT 子句对其进行解释。
如果 JSON-expression 是 JSON 数组,那么将使用密钥名称 SYSIBM_ROOT_ARRAY 将其隐式包装,将 JSON-expression 修改为 JSON 对象。 将隐式修改 sql-json-path-expression 以说明此附加键。
FORMAT JSON 或 FORMAT BSON
指定如何解释 JSON-expression
格式 JSON
JSON-expression 包含 JSON 数据。 如果 JSON-expression 是二进制数据,那么会将数据解释为 UTF-8 或 UTF-16。 不能使用 EBCDIC CCSID 对二进制数据进行编码。
格式 Bson
JSON-expression 包含 JSON 数据的 BSON 表示。 指定 FORMAT BSON 时, JSON-expression 必须是二进制字符串数据类型。
如果未指定 FORMAT 子句,并且 JSON-expression 是字符或图形字符串,那么会将 JSON-expression 视为 JSON。 如果 JSON-expression 是二进制字符串,那么 JSON-expression 将被视为 BSON。
sql-json-path-expression
返回内置字符或图形字符串数据类型的值的表达式。 该字符串解释为 SQL/JSON 路径表达式,用于在 JSON-expression指定的 JSON 数据中查找 JSON 值。 如果多个值具有相同的键,那么将选择其中一个 JSON 值。
有关 SQL/JSON 路径表达式的内容的信息,请参阅 sql-json-path-expression
AS 路径名
指定用于标识 sql-json-path-expression的名称。
正在返回 数据类型
指定结果的格式。
数据类型
结果的数据类型。 对于 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 字符串类型。 仅当返回 SQL/JSON 对象时,才能使用 FORMAT BSON。
WITHOUT ARRAY WRAPPER 或 WITH ARRAY WRAPPER
指定是否应将输出值包装在 JSON 数组中。
无数组包装程序
结果未回绕。 这是缺省情况。 使用导致两个或多个 SQL/JSON 元素的序列的 SQL/JSON 路径会导致错误。
使用无条件数组包装程序
结果括在方括号中以创建 JSON 数组。
使用条件数组包装程序
如果返回了多个 SQL/JSON 元素,或者返回了不是 JSON 数组或 JSON 对象的单个 SQL/JSON 元素,那么结果将括在方括号中以创建 JSON 数组。
下表显示了如何将这些选项中的每个选项应用于 JSON 文本 {a:"10", b:[1, 2]}
表 1. 使用每个 WRAPPER 子句的结果
WRAPPER 子句 $.a 的路径值 $.b 的路径值
无数组包装程序 "10" [1,2]
使用无条件数组包装程序 ["10"] [[1,2]]
使用条件数组包装程序 ["10"] [1,2]
保留引号或省略引号
指定返回标量字符串时是否应除去周围的引号。
保留引号
指示未从标量字符串中除去引号。 这是缺省情况。
省略引号
指示从标量字符串中除去引号。 指定略去引号时,不能指定 WITH ARRAY WRAPPER 子句
空的
指定使用 sql-json-path-expression返回空序列时的行为。
空空空
送回空值。 这是缺省情况。
EMPTY 上出错
返回了错误。
空的数组
返回空数组。
空对象
返回空对象。
发生错误时
指定 JSON_QUERY 迂到错误时的行为。
空开启错误
送回空值。 这是缺省情况。
错误开启错误
返回了错误。
出错时数组为空
返回空数组。
出错时对象为空
返回空对象。

结果可以为空。 如果 JSON-expression 为空,那么结果为空值。

示例

  • 从 JSON 文本返回与 name 键关联的 JSON 对象。
    VALUES JSON_QUERY('{"id":"701", "name":{"first":"John", "last":"Doe"}}', '$.name');
    结果是表示 JSON 对象的以下字符串。
    {"first":"John", "last":"Doe"}