import json content = json.loads(open('help.json').read()) d = {} for key in content: if key in d: raise ValueError('Duplicated key {}'.format(key)) else: d[key]='' item=content[key] if 'title' not in item: raise ValueError('Missing key : title in {}'.format(key)) if 'description' not in item: raise ValueError('Missing key : description in {}'.format(key)) if 'options' in item: if len(item['options']) < 1: raise ValueError('Empty options in {}'.format(key)) for option in item['options']: if option not in content: raise ValueError('Missing item {} in {}'.format(option, key)) elif 'action' not in item: raise ValueError('Missing action in {}'.format(key)) # Check cycle def run(key, content, path): if key in path: raise ValueError('Cycling path {}'.format(path)) path.append(key) item=content[key] if 'action' in item: path.append(item['action']) # print(path) return None else: for option in item['options']: run(option, content, path.copy()) run('root', content, [])