您对预期输出有想法吗?例如,这能行吗?
>>> f = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'
在这种情况下,您只能调用 .json.dumps(f.__dict__)
如果你想要更多自定义输出,那么你将不得不子类JSONEncoder
并实现你自己的自定义序列化。
有关简单示例,请参阅下文。
>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'
然后,将此类作为 kwarg 传递给 json.dumps()
方法:cls
json.dumps(cls=MyEncoder)
如果您还想解码,则必须为JSONDecoder
类提供自定义。例如:object_hook
>>> def from_json(json_object):
if 'fname' in json_object:
return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>>