字典中包含非字典的子对象的序列化
使用default参数,default=lambda obj: obj.__dict__(), 保证其中包含的非字典对象的类有方法__dict__
class ID(object): def __init__(self, id) -> None: self.id = id def __dict__(self): return {"id": self.id} a = {"id": ID(100), "name": "test"} print(json.dumps(a, default=lambda obj: obj.__dict__()))
>>>Output:
{"id": {"id": 100}, "name": "test"}
使用default参数,自定义函数encode
def default(o): if isinstance(o, decimal.Decimal): return float(o) elif isinstance(o, datetime.datetime): return o.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(o, datetime.date): return str(o) print(json.dumps(a, default=default))
使用cls参数,基于json.JSONEncoder自定义类encode
class Encoder(json.JSONEncoder): def default(self, o): if isinstance(o, decimal.Decimal): return float(o) elif isinstance(o, datetime.datetime): return o.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(o, datetime.date): return str(o) print(json.dumps(a, cls=Encoder))