我正在努力将类序列化为json文件。
我尝试了两种方法,一种创建目录,第二种使用json。
authorized_user = Login('1','test', 'test2')
vars(authorized_user)
jsons.dumps(authorized_user)
他们都还给了我
{'_Login__request_type': '1', '_Login__username': 'test', '_Login__password': 'test2'}
如何删除登录前缀?
还有什么我想问一下是否有一种方法可以将对象序列化为具有更多json命名约定的json。就像在python命名约定中写python类字段一样:__username,但是解析器会知道它是用户名。
答案 0 :(得分:1)
要修改将类编码为JSON格式/取消 Login 前缀的方式,可以为json.dumps()
使用两个不同的参数之一:
要使用自定义
JSONEncoder
子类(例如,覆盖子类的子类default()
方法来序列化其他类型),请使用 cls kwarg;否则使用JSONEncoder
。
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Login):
return {"request_type": obj.request_type, "username": obj.username, "password": obj.password}
json.dumps(authorized_user, cls=ComplexEncoder)
# {"request_type": "1", "username": "test", "password": "test2"}
如果已指定,则 default 应该是为无法序列化的对象调用的函数。它应该返回该对象的JSON可编码版本或引发
TypeError
。如果未指定,将引发TypeError
。
def new_encoder(obj):
if isinstance(obj, Login):
return {"request_type": obj.request_type, "username": obj.username, "password": obj.password}
json.dumps(authorized_user, default=new_encoder)
# {"request_type": "1", "username": "test", "password": "test2"}