暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T JSON_QUERY

墨天轮 2019-10-12
1021

JSON_QUERY

语法:

json_query(json_data, path_expr [returning_clause] [wrapper_clause] [on_error_clause] [on_empty_clause] )

功能:返回指定路径JSON非标量数据(数组或对象)。

说明:

  • json_data:合法的JSON非标量数据(数组或对象);如果为空串''或空值NULL,则该函数返回空值NULL。
  • path_expr:路径表达式;如果路径表达式非法,则该函数报错。
  • returning_clause:
    RETURNING [VARCHAR2[(size)]] | CLOB
    • 说明:

      该子句描述的返回值信息:

      • 未指定该子句时,默认返回VARCHAR2(3900);
      • size取值范围为1-32767,未指定size时,默认为3900;
      • 返回字符串转义字符会做反转义处理,例如标量字符串"A\"B"则反转义为A"B。
  • wrapper_clause
    [WITH]|[WITH CONDITIONAL]|[WITH UNCONDITIONAL]|[WITHOUT] [ARRAY] WRAPPER
    • 说明:

      该子句描述路径表达式匹配到多个JSON数据时(标量或非标量),是否将其封装为数组作为返回值,其中ARRAY关键字可以不用指定,仅仅是为了语义清晰:

      • WITH [ARRAY] WRAPPER:将匹配到的1个或多个JSON数据封装为数组;
      • WITH UNCONDITIONAL [ARRAY] WRAPPER:同WITH [ARRAY] WRAPPER;
      • WITH CONDITIONAL [ARRAY] WRAPPER:当只匹配到一个元素,且是非标量元素,则不做封装成数组操作,其余情况同WITH [ARRAY] WRAPPER;
      • WITHOUT [ARRAY] WRAPPER:禁止将匹配到的JSON数据封装为数组,当匹配到多个数据或者匹配到单个标量数据的时候按照on_error子句处理,也是未指定wrapper_clause子句的默认行为。
  • on_error_clause:
    [ERROR]|[NULL] |[EMPTY] |[EMPTY ARRAY] |[EMPTY OBJECT] ON ERROR
    • 说明:

      当出现以下错误时:

      • json_data为不合法的JSON数据或为JSON标量;
      • 路径表达式匹配到标量数据,且处在WITHOUT WRAPPER属性;
      • 路径表达式未匹配到数据,且未指定on_empty_clause子句;
      • 返回JSON数据超过returning_clause子句指定的大小;
      • 路径表达式匹配到多个JSON数据,且处在WITHOUT WRAPPER属性。

      该子句返回值行为:

      • ERROR ON ERROR:返回错误;
      • NULL ON ERROR:返回空值NULL,也是未指定on_error_clause子句的默认行为;
      • EMPTY ON ERROR:和EMPTY ARRAY ON ERROR相同;
      • EMPTY ARRAY ON ERROR:返回JSON空数组”[]”;
      • EMPTY OBJECT ON ERROR:返回JSON空对象”{}”。
  • on_empty_clause:
    [ERROR]|[NULL] |[EMPTY] |[EMPTY ARRAY] |[EMPTY OBJECT] ON EMPTY
    • 说明:该子句描述路径表达式未匹配到JSON数据时,该子句返回值行为:
      • ERROR ON EMPTY:返回错误;
      • NULL ON EMPTY:返回空值NULL。
      • EMPTY ON EMPTY:和EMPTY ARRAY ON EMPTY相同;
      • EMPTY ARRAY ON EMPTY:返回JSON空数组”[]”;
      • EMPTY OBJECT ON EMPTY:返回JSON空对象”{}”。

        未指定该子句时,采用ON ERROR子句行为。

示例

SQL> select json_query('{"codes":{"suzhou":0,"shanghai":0}}', '$') from SYS_DUMMY; JSON_QUERY('{"CODES":{"SUZHOU":0,"SHANGHAI":0}}', '$') ---------------------------------------------------------------- {"codes":{"suzhou":0,"shanghai":0}} 1 rows fetched. SQL> select json_query('{"codes":{"suzhou":0,"shanghai":0}}', '$.codes') from SYS_DUMMY; JSON_QUERY('{"CODES":{"SUZHOU":0,"SHANGHAI":0}}', '$.CODES') ---------------------------------------------------------------- {"suzhou":0,"shanghai":0} 1 rows fetched. SQL> select json_query('{"A":{"B":[1,[2,[3,{"C":"Hello!"}]]]}}', '$.A.B[1][1][1]' returning varchar2(20)) from SYS_DUMMY; JSON_QUERY('{"A":{"B":[1,[2,[3,{"C":"HELLO!"}]]]}}', '$.A.B[1][1 ---------------------------------------------------------------- {"C":"Hello!"} 1 rows fetched.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论