【问题标题】:Is there a JSON schema validator provided by Oracle PL/SQL?Oracle PL/SQL 是否提供了 JSON 模式验证器?
【发布时间】:2020-04-13 03:05:52
【问题描述】:

我可以找到一个由 PL/SQL 使用 XML 模式实现的 XML 验证器。有没有类似的方法在 PL/SQL 中使用 JSON 模式来验证 JSON?

XML 验证器-https://oracle-base.com/articles/misc/validate-xml-against-xml-schema-xsd

【问题讨论】:

    标签: json database validation plsql schema


    【解决方案1】:

    您可以创建一个带有 JSON 约束列的 JSON 表,并使用它。

    CREATE TABLE my_json_table (
      id RAW(16) NOT NULL,
      json_data CLOB,
      CONSTRAINT myjson_headers_pk PRIMARY KEY (id),
      CONSTRAINT myjson_json_chk CHECK (json_data IS JSON)
    );
    
    CREATE OR REPLACE FUNCTION is_json_valid (p_json IN CLOB)
    RETURN BOOLEAN IS
      e_invalid EXCEPTION;
      PRAGMA EXCEPTION_INIT (e_invalid, -1000);
      PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
        INSERT INTO my_json_table (id, json_data)
        VALUES (SYS_GUID(), p_json);
    
        ROLLBACK;
    
        RETURN TRUE;
    EXCEPTION
        WHEN e_invalid THEN
          RETURN FALSE;
    END;
    

    【讨论】:

    • 但这只会检查它是否是 JSON 格式,对吗?我想根据模式验证它
    • 是的,但我认为您可以做到这一点的唯一方法是实际调用该服务。如果不是这样,有人会纠正我。
    【解决方案2】:

    Oracle 中没有 JSON 模式验证器。

    但是您可以想出一个解决方法。 您可以像在 XML 中一样构建架构,将 JSON 解析为 XML,然后根据您的架构验证 XML。

    您可以在下面找到如何将 JSON 解析为 XML:

    DECLARE
      l_json VARCHAR2(32767);
      l_xml  XMLTYPE;
    BEGIN
      l_json := '[
                   {"department_number":10,"department_name":"ACCOUNTING"},
                   {"department_number":20,"department_name":"RESEARCH"}
                 ]';
    
      l_xml := APEX_JSON.to_xmltype(l_json );
      DBMS_OUTPUT.put_line(l_xml.getClobVal());
    END;
    

    输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <json>
        <row>
            <department_number>10</department_number>
            <department_name>ACCOUNTING</department_name>
        </row>
        <row>
            <department_number>20</department_number>
            <department_name>RESEARCH</department_name>
        </row>
    </json>
    

    否则您必须进行服务验证。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2021-09-06
      • 2019-12-10
      • 2012-03-08
      • 2023-03-03
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多