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.