栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用simplejson序列化简单类对象的最简单方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用simplejson序列化简单类对象的最简单方法?

我过去曾经使用过这种策略,并且对此感到非常满意:

dict
使用以下结构将自定义对象编码为JSON对象文字(例如Python ):

{ '__ClassName__': { ... } }

从本质上讲,这是一个项目,

dict
其单键是一个特殊字符串,用于指定要编码的对象类型,并且其值是
dict
实例属性的。如果这样的话。

编码器和解码器的一个非常简单的实现(从我实际使用的代码简化)如下:

TYPES = { 'ParentClass': ParentClass,          'ChildClass': ChildClass }class CustomTypeEnprer(json.JSONEnprer):    """A custom JSonEnprer class that knows how to enpre core custom    objects.    Custom objects are enpred as JSON object literals (ie, dicts) with    one key, '__TypeName__' where 'TypeName' is the actual name of the    type to which the object belongs.  That single key maps to another    object literal which is just the __dict__ of the object enpred."""    def default(self, obj):        if isinstance(obj, TYPES.values()): key = '__%s__' % obj.__class__.__name__ return { key: obj.__dict__ }        return json.JSONEnprer.default(self, obj)def CustomTypeDeprer(dct):    if len(dct) == 1:        type_name, value = dct.items()[0]        type_name = type_name.strip('_')        if type_name in TYPES: return TYPES[type_name].from_dict(value)    return dct

在此实现中,假设您要编码的对象将具有一个

from_dict()
类方法,该方法知道如何
dict
从JSON解码后的实例中重新创建实例。

扩展编码器和解码器以支持自定义类型(例如

datetime
对象)很容易。

EDIT
,以回答您的编辑:像这样的实现的好处是它将自动对

TYPES
映射中找到的任何对象的实例进行编码和解码。这意味着它将自动处理ChildClass,如下所示:

class ChildClass(object):    def __init__(self):        self.foo = 'foo'        self.bar = 1.1        self.parent = ParentClass(1)

这应该导致JSON如下所示:

{ '__ChildClass__': {    'bar': 1.1,    'foo': 'foo',    'parent': {        '__ParentClass__': { 'foo': 1}        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616850.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号