JSON_ELEMENT_T¶
JSON_ELEMENT_T是JSON_OBJECT_T、JSON_SCALAR_T、JSON_ARRAY_T的父类型。JSON_ELEMENT_T向子类型的转换和子类型向JSON_ELEMENT_T的转换可以通过TREAT AS实现。
JSON_ELEMENT_T对象类型包含的子程序如下:
构造函数¶
STATIC FUNCTION parse(json VARCHAR2) RETURN JSON_ELEMENT_T
STATIC FUNCTION parse(json CLOB) RETURN JSON_ELEMENT_T
STATIC FUNCTION parse(json BLOB) RETURN JSON_ELEMENT_T
构造函数parse将VARCHAR2/BLOB/CLOB类型的有效json输入转换为JSON_ELEMENT_T类型输出,如果输入的json串无效则会报错。
序列化¶
MEMBER FUNCTION to_String RETURN VARCHAR2
MEMBER FUNCTION to_Number RETURN NUMBER
MEMBER FUNCTION to_Boolean RETURN BOOLEAN
MEMBER FUNCTION to_Clob RETURN CLOB
MEMBER FUNCTION to_Blob RETURN BLOB
MEMBER PROCEDURE to_Clob(c IN OUT CLOB)
MEMBER PROCEDURE to_Blob(c IN OUT BLOB)
序列化函数将JSON_ELEMENT_T中的json数据转换为对应的类型并输出,序列化过程to_Clob和to_Blob将输入JSON_ELEMENT_T中的json数据转换为对应的数据并存入输入的lob对象中。
内省函数¶
MEMBER FUNCTION is_Object RETURN BOOLEAN
MEMBER FUNCTION is_Array RETURN BOOLEAN
MEMBER FUNCTION is_Number RETURN BOOLEAN
MEMBER FUNCTION is_String RETURN BOOLEAN
MEMBER FUNCTION is_Boolean RETURN BOOLEAN
MEMBER FUNCTION is_True RETURN BOOLEAN
MEMBER FUNCTION is_False RETURN BOOLEAN
MEMBER FUNCTION is_Null RETURN BOOLEAN
MEMBER FUNCTION get_Size RETURN NUMBER
内省函数可以查看json对象的属性,其中get_Size函数的返回值取决于json类型:
- JSON_SCALAR_T:返回1
- JSON_OBJECT_T:返回对象的属性个数
- JSON_ARRAY_T:返回数组的长度
注解
- JSON_OBJECT_T、JSON_ARRAY_T作为JSON_ELEMENT_T的子类型,继承了JSON_ELEMENT_T的所有函数,如to_String、is_Number、is_String等。
- 神通的JSON_SCALAR_T是一个空类型,只包含json值和返回1的get_Size函数。
示例1¶
-- json_element_t构造函数
create or replace procedure proc1 as
je json_element_t;
str varchar2(50);
begin
je:=json_element_t.parse('12345'::varchar2);
dbms_output.put_line(je.to_Number);
je:=json_element_t.parse('{"a":"xyz"}'::clob);
dbms_output.put_line(je.to_String);
je:=json_element_t.parse('false');
dbms_output.put_line(je.to_Boolean);
je:=json_element_t.parse('[1,2,3,4]');
dbms_output.put_line(je.get_Size);
je:=json_element_t.parse('12345');
str:=dbms_lob.substr(je.to_Clob,5,1);
dbms_output.put_line(str);
end;
/
exec proc1;
12345
{"a": "xyz"}
f
4
12345
drop procedure proc1;
示例2¶
--treat as json_object_t
create or replace procedure proc1 as
je json_element_t;
jo json_object_t;
begin
je:=json_element_t('{"a":"xyz","b":[1,2,3]}');
jo:=treat(je as json_object_t);
dbms_output.put_line(jo.to_String);
jo:=treat(json_element_t('{"a":"xyz"}') as json_object_t);
dbms_output.put_line(jo.to_String);
end;
/
exec proc1;
{"a": "xyz", "b": [1, 2, 3]}
{"a": "xyz"}
drop procedure proc1;
--treat as json_array_t
create or replace procedure proc1 as
je json_element_t;
ja json_array_t;
begin
je:=json_element_t('[1,2,true,"abcd",{"a":"xyz"}]');
ja:=treat(je as json_array_t);
dbms_output.put_line(ja.to_String);
je:=ja.get(4);
dbms_output.put_line(je.to_String);
ja:=treat(json_element_t('[1,2,3,4]') as json_array_t);
dbms_output.put_line(ja.to_String);
end;
/
exec proc1;
[1, 2, true, "abcd", {"a": "xyz"}]
{"a": "xyz"}
[1, 2, 3, 4]
drop procedure proc1;