Tinydb fits entirely in memory so it's ok to call .all(), get data and make some stats. Here is the code that dumps db structure per table per document type, defined by the set of keys:
from tinydb import TinyDB
from collections import Counter
db = TinyDB('db.json')
for table in db.tables():
contents = db.table(table).all()
schema = Counter(frozenset(doc.keys()) for doc in contents)
print('table %s (documents %d):' % (table, sum(schema.values())))
for fields, count in schema.iteritems():
print(' document (count %d):' % count)
print('\n'.join(' %s' % field for field in fields))
Sample output:
table _default (documents 36):
document (count 15):
foo
bar
document (count 21):
int
char