用于将任意对象图序列化为JSON的Python库
项目描述
jsonpickle
jsonpickle 是一个用于复杂 Python 对象与 JSON 之间双向转换的库。jsonpickle 基于现有的 JSON 编码器,如 simplejson、json 和 ujson。
有关完整文档,请访问 jsonpickle 文档。
鼓励在 GitHub 上的 jsonpickle 仓库 中提交错误报告和合并请求。
使用方法
以下是一个如何在使用脚本/项目时使用 jsonpickle 的非常简单的示例。注意 jsonpickle.encode 和 decode 的使用,以及数据是如何写入/编码到文件然后从文件中读取/解码的。
import jsonpickle
from dataclasses import dataclass
@dataclass
class Example:
data: str
ex = Example("value1")
encoded_instance = jsonpickle.encode(ex)
assert encoded_instance == '{"py/object": "__main__.Example", "data": "value1"}'
with open("example.json", "w+") as f:
f.write(encoded_instance)
with open("example.json", "r+") as f:
written_instance = f.read()
decoded_instance = jsonpickle.decode(written_instance)
assert decoded_instance == ex
有关更多示例,请参阅 GitHub 上的 示例目录 中的示例脚本。这些脚本可以在您的本地机器上运行,以了解 jsonpickle 的工作方式和行为,以及如何使用它。欢迎用户就他们如何使用 jsonpickle 提供贡献!
为什么选择 jsonpickle?
使用 Python 的 pickle(或 cPickle 或 dill)序列化的数据在 Python 外部难以阅读。使用 json 格式,jsonpickle 允许简单数据类型以可读格式存储,而更复杂的数据类型,如 numpy 数组和 pandas 数据框,则可以在支持 json 的任何平台上以机器可读的方式读取。例如,与 pickled 数据不同,存储在 Amazon S3 桶中的 jsonpickled 数据可以被 Amazon 的 Athena 指数化。
安全
从安全角度来看,jsonpickle 应与 Python stdlib 中的 pickle 模块 相同对待。
安装
使用 pip 安装最新稳定版本
pip install jsonpickle
使用 github 安装最新更改
pip install git+https://github.com/jsonpickle/jsonpickle.git
Numpy/Pandas 支持
jsonpickle 包含内置的 numpy 和 pandas 扩展。如果您想编码 sklearn 模型、numpy 数组、pandas 数据框以及其他基于 numpy/pandas 的数据,则必须通过注册其处理程序来启用 numpy 和/或 pandas 扩展。
>>> import jsonpickle.ext.numpy as jsonpickle_numpy >>> import jsonpickle.ext.pandas as jsonpickle_pandas >>> jsonpickle_numpy.register_handlers() >>> jsonpickle_pandas.register_handlers()
开发
使用 make 运行单元测试
make test
内部使用 pytest 运行单元测试。
提供 tox 目标以使用所有已安装和受支持的 Python 版本运行测试
make tox
jsonpickle 本身除了 Python stdlib 外没有其他依赖项。当仅使用 tox 测试运行程序时,需要 tox 进行测试。
测试要求在 setup.cfg 中指定。建议创建一个虚拟环境并在其中运行测试。
python3 -mvenv env3 source env3/bin/activate pip install --editable '.[dev]' make test
您还可以使用类似 vx 的工具来激活虚拟环境而不会污染您的 shell 环境
python3 -mvenv env3 vx env3 pip install --editable '.[dev]' vx env3 make test
如果您不能使用 venv,可以按以下方式安装测试包
pip install .[testing]
jsonpickle 支持多个 Python 版本,因此在使用多个虚拟环境和 tox 的组合时,可以有效地在开发过程中捕获兼容性问题。
GPG 签名
遗憾的是,虽然 jsonpickle 3.0.1 之前的版本仍然应该签名,但 GPG 签名支持已于 2023 年 5 月从 PyPi 中移除(https://blog.pypi.ac.cn/posts/2023-05-23-removing-pgp/)。
许可
基于BSD许可证授权。详细信息请见COPYING文件。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。