Мне нужна помощь в понимании некоторых питонических фрагментов кода "dictify" / "jsonify" - PullRequest
0 голосов
/ 20 января 2011

Мне нужна помощь в понимании этого кода jsonify / dictify на python, чтобы я мог его воспроизвести:


TYPES = {}

# auto-register all already defined subclasses of CustomObject to the types map
# so they will become seriazible/deseriazible
for N,T in locals().items():
    if isinstance(T, type) and issubclass(T, CustomObject):
        TYPES[N] = T


def CustomTypeDecoder(dct):
    type_name = dct.get('type')
    if type_name:
        cls = TYPES.get(type_name)
        if cls:
            return cls(**dct)
    return dct

def loads(s):
    return json.loads(s, object_hook=CustomTypeDecoder) 


class CustomTypeEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, tuple(TYPES.values())):
            res = dict(type=obj.__class__.__name__)
            res.update(obj.to_dict())
            return res
        return json.JSONEncoder.default(self, obj)

def dumps(obj):
    return json.dumps(obj, cls=CustomTypeEncoder)

1 Ответ

1 голос
/ 20 января 2011

Код, который выполняет тяжелую работу, находится в самом классе.Строки 15 и 27 используют функциональные возможности класса для преобразования класса из и в dicts, которые являются JSON-сериализуемыми;остальное весь код администрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...