使用functools.singledispatch的Python自定义JSON编码器,支持为Python的内置类和用户创建的类提供自定义编码器,无需过多繁琐的操作。
项目描述
使用functools.singledispatch的Python自定义JSON编码器,支持为Python的内置类和用户创建的类提供自定义编码器,无需过多繁琐的操作。
文档 |
|
---|---|
测试 |
|
PyPI |
|
Anaconda |
|
活动 |
|
QA |
|
其他 |
用法
创建和注册自定义编码器就像
>>> import sdjson >>> >>> @sdjson.dump.register(MyClass) >>> def encode_myclass(obj): ... return dict(obj) >>>
在这种情况下,MyClass可以通过调用dict()使其可JSON序列化。如果您的类需要更复杂的逻辑来使其可JSON序列化,请在这里完成。
然后,将对象转储为字符串
>>> class_instance = MyClass() >>> print(sdjson.dumps(class_instance)) '{"menu": ["egg and bacon", "egg sausage and bacon", "egg and spam", "egg bacon and spam"], "today\'s special": "Lobster Thermidor au Crevette with a Mornay sauce served in a Provencale manner with shallots and aubergines garnished with truffle pate, brandy and with a fried egg on top and spam."}' >>>
或将数据转储到文件
>>> with open("spam.json", "w") as fp: ... sdjson.dumps(class_instance, fp) ... >>>
sdjson 还提供了对 json 模块中的 load、loads、JSONDecoder、JSONDecodeError 和 JSONEncoder 的访问,允许您将 sdjson 作为 json 的直接替代品使用。
如果您想在不使用自定义编码器的情况下转储对象,您可以传递一个不同的 JSONEncoder 子类,或者直接传递 JSONEncoder 本身以获取标准功能。
>>> sdjson.dumps(class_instance, cls=sdjson.JSONEncoder) >>>
完成之后,如果您想注销编码器,可以调用
>>> sdjson.encoders.unregister(MyClass) >>>
来移除 MyClass 的编码器。如果您想用另一个编码器替换它,没有必要调用此函数:@sdjson.encoders.register 装饰器将替换给定类中任何现有的装饰器。
请注意,此模块不能用于创建 json 已经了解的任何对象的自定义编码器;即:dict、list、tuple、str、int、float、bool 和 None。
待办事项
添加对自定义解码器的支持。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
sdjson-0.5.0.tar.gz (9.0 kB 查看散列)
构建分发
sdjson-0.5.0-py3-none-any.whl (11.4 kB 查看散列)
关闭
sdjson-0.5.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1cb9fc9316b2fab479575f9a3102190da49f151be25a87e296a2316707b9e46e |
|
MD5 | 265a87757c20357f3b5e45c17c32397e |
|
BLAKE2b-256 | 1f37e4688b0d818e43809c8587aff64c1c940310a69eb7d6164dc604d5349ddf |
关闭
sdjson-0.5.0-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 9e31c8075ec65671668dfaa065267fe565790aeee5d31f44b9c1408c57d8054c |
|
MD5 | fc34909bbea27502cf3217cbbad8fc48 |
|
BLAKE2b-256 | d40a086439278bf5aac9c9706bdaba4e1a68cd903b90da479c0aa421eb1c92a7 |