Hmmm, not sure...
What happens if you use a blob instead of a clob?
DECLARE
l_data CLOB;
l_json json_object_t;
l_text BLOB := EMPTY_BLOB();
BEGIN
dbms_lob.createtemporary(l_data,true);
l_data := '{"text": "';
for i in 1 .. 50 loop
l_data := l_data || lpad('x', 32767, 'x');
end loop;
l_data := l_data || '"}';
l_json := json_object_t.parse(l_data);
dbms_lob.freetemporary(l_data);
l_text := l_json.get_blob('text');
dbms_output.put_line('got ' || dbms_lob.getlength(l_text) || ' chars');
END;
/
got 1638350 chars
PL/SQL procedure successfully completed.