JSON_QUERY
JSON_QUERY 函数使用 SQL/JSON 路径表达式从指定的 JSON 文本返回 SQL/JSON 值。
- JSON 表达式
- 返回内置字符串数据类型的值的表达式。 如果返回字符或图形值,那么它必须包含格式正确的 JSON 数据。 如果它是二进制数据类型,那么将根据显式或隐式 FORMAT 子句对其进行解释。
- 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 必须是二进制字符串数据类型。
- sql-json-path-expression
- 返回内置字符或图形字符串数据类型的值的表达式。 该字符串解释为 SQL/JSON 路径表达式,用于在 JSON-expression指定的 JSON 数据中查找 JSON 值。 如果多个值具有相同的键,那么将选择其中一个 JSON 值。
- 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 数组。
表 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 对象。
结果是表示 JSON 对象的以下字符串。VALUES JSON_QUERY('{"id":"701", "name":{"first":"John", "last":"Doe"}}', '$.name');{"first":"John", "last":"Doe"}
