Is there a JSON schema validator provided by Oracle PL/SQL?
You can create a JSON table with a JSON constrained column, and use that.
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;
There is not a JSON schema validator in Oracle.
But you can think of a workaround.You can build the schema as in XML, parse your JSON to XML and then validate the XML against your schema.
Below you can find how to parse a JSON to 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;
The output:
<?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>
Otherwise you have to go with service validation.