python 序列化类定义_在Python中将自定义对象序列化为JSON的方法

Generally, we can define __str__ method to make str(obj) return what we want.

But now I want to define my Model object to return a default JSON string when using json.dumps(obj).

Is there any nice way for me to declare a method in the class to do this?

class MyClass:

...

def __json__(self):

return {'name': self.name, 'age': self.age}

obj = MyClass()

json.dumps(obj) # returns the same as json.dumps(obj.__json__)

解决方案

If you only need Python -> JSON, it's simple to write a JSONEncoder class that calls such a method for any object:

class AutoJSONEncoder(JSONEncoder):

def default(self, obj):

try:

return obj._json()

except AttributeError:

return JSONEncoder.default(self, obj)

You can then use the class directly AutoJSONEncoder().encode(obj) or through the dumps interface json.dumps(obj, cls=AutoJSONEncoder).

The reverse direction requires at least a list of classes for which to call a _fromjson method.

(Note: __foo__ names are reserved so you shouldn't define them for your own purposes. __bar invokes name mangling, which probably isn't what you want.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值