This is a very quick example of tables and nested in each table the columns and indexes that tables has.
select t.table_name,
  cursor(select column_name
             from user_tab_cols tc 
             where tc.table_name = t.table_name) cols ,
  cursor(select index_name
             from user_indexes i 
             where i.table_name = t.table_name) indexes
 from user_tables t
The resulting JSON looks like this.
