Source code for jsonstruct.jsonstruct

# -*- coding: utf-8 -*-

import json


[docs]class Struct(object): """ Building recursive storage object """ def __init__(self, **entries): new_data = entries.copy() for key in new_data.keys(): if isinstance(new_data[key], dict): new_data[key] = Struct(**new_data[key]) elif isinstance(new_data[key], list): new_data[key] = [ Struct(**item) if isinstance(item, dict) else item for item in new_data[key]] elif isinstance(new_data[key], tuple): new_data[key] = tuple( Struct(**item) if isinstance(item, dict) else item for item in new_data[key]) self.__dict__.update(new_data) def __getattr__(self, key): """ __getattr__ to avoid exception when not attr found """ try: return object.__getattr__(self, key) except AttributeError: # but raise for any missing internal methods if key.startswith('_'): raise return None
[docs] def get_data(self): """ Return stored data as dict """ data = {} for field in self.__dict__: _field = getattr(self, field, None) if isinstance(_field, self.__class__): data[field] = _field.get_data() elif isinstance(_field, list): data[field] = [ _f.get_data() if isinstance(_f, self.__class__) else _f for _f in _field] else: data[field] = _field return data
[docs] def get_json(self, data=None): if not data: data = self.get_data() return json.dumps(data)