What GET_SIZE Gets You
DECLARE
l_1_nv_pairs json_object_t := json_object_t ('{"favorite_color":"green"}');
l_2_nv_pairs json_object_t
:= json_object_t ('{"favorite_color":"green", "favorite_number":101}');
l_3_nv_pairs_nested json_object_t
:= json_object_t (
'{"favorite_color":"green",
"favorite_car":"Bicycle",
"more_favorites":{"favorite_number":101, "favorite_letter":"G"}
}');
l_eats json_array_t
:= json_array_t ('["Stirfry", "Yogurt", "Mosquitos", ["A","B","C"]]');
BEGIN
DBMS_OUTPUT.put_line (
'Number of NV pairs in object1: ' || l_1_nv_pairs.get_size);
DBMS_OUTPUT.put_line (
'Number of NV pairs in object2: ' || l_2_nv_pairs.get_size);
DBMS_OUTPUT.put_line (
'Number of NV pairs in object3: ' || l_3_nv_pairs_nested.get_size);
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
END;
Number of NV pairs in object1: 1
Number of NV pairs in object2: 2
Number of NV pairs in object3: 3
Number of elements in array: 4
Using the IS_* Functions
DECLARE
l_eats json_array_t;
l_object json_object_t;
l_array json_array_t;
l_string json_scalar_t;
BEGIN
l_eats := json_array_t ('["Stirfry", {"name":"Spider"}, "Mosquitos", ["finger","toe","nose"]]');
l_eats.on_error (1);
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
CASE
WHEN l_eats.get (indx).is_string
THEN
/* Even though it "is_string", must cast to the subtype
for the assignment to work */
l_string := treat (l_eats.get (indx) as json_scalar_t);
DBMS_OUTPUT.put_line (l_eats.get_string (indx));
WHEN l_eats.get (indx).is_object
THEN
l_object := TREAT (l_eats.get (indx) AS json_object_t);
DBMS_OUTPUT.put_line (l_object.stringify);
WHEN l_eats.get (indx).is_array
THEN
l_array := TREAT (l_eats.get (indx) AS json_array_t);
DBMS_OUTPUT.put_line (l_array.stringify);
ELSE
DBMS_OUTPUT.put_line ('no match');
END CASE;
END LOOP;
END;
Stirfry
{"name":"Spider"}
Mosquitos
["finger","toe","nose"]