import re import json trailing_comma = re.compile(r',[ ]*\]') trailing_double_marker = re.compile(r'(\d+[.]?)(d)([^+\-\d])') trailing_period = re.compile(r'(\d+\.)(\W)') double_marker = re.compile(r'(\d+)(d)([+-]?\d)') comments = re.compile(r'//.*') key = re.compile(r'([ ]*)(\w*)([ ]*:.*)') def load(f): s = f.read() s = trailing_comma.sub(']', s) s = trailing_double_marker.sub(r'\1\3', s) s = double_marker.sub(r'\1e\3', s) s = comments.sub('', s) s = key.sub(r'\1"\2"\3', s) s = trailing_period.sub(r'\g<1>0\2', s) db = {} for data in re.findall('{.*?}', s, flags=re.DOTALL): d = json.loads(data) name = d['name'] index = d['index'] if name not in db: db[name] = {} if index not in db[name]: db[name][index] = {} db[name][index].update(d) return db