一个用于读取/写入JSON数据的超快Python模块
项目描述
一个用于读取和写入JSON数据的超快、安全的Python模块。可以作为Python内置的json模块的替代品。这是一个alpha软件,可能会存在bug,所以可能还不适合在生产环境中使用 仅 用于测试。 :wink
安装
pip install hyperjson
使用
hyperjson旨在作为Python的json模块的替代品
>>> import hyperjson
>>> hyperjson.dumps([{"key": "value"}, 81, True])
'[{"key":"value"},81,true]'
>>> hyperjson.loads("""[{"key": "value"}, 81, true]""")
[{u'key': u'value'}, 81, True]
动机
解析JSON是一个已解决的问题;所以,没有必要重新发明轮子,对吧?
但是,除非你关心 性能和安全。
事实证明,正确解析JSON是一个 难题。然而,得益于Rust,我们可以最大限度地减少遇到 堆栈溢出或段错误 的风险。
hyperjson是Rust的serde-json和pyo3的薄包装器。它与Python 3(以及基于最大努力的Python 2)兼容。
关于这个项目的更深入讨论,请观看2018年8月Rust Cologne Meetup录制的关于这个项目的讲话。
目标
- 兼容性:支持Python的
json
模块的全部功能集。 - 安全性:没有段错误、恐慌或溢出。
- 性能:比
json
模块快得多,与C语言编写的ujson
一样快。
非目标
- 支持ujson和simplejson扩展:
自定义扩展,如encode()
、__json__()
或toDict()
,不受支持。原因是,它们违反了PEP8规范(例如,双下划线方法仅限于标准库,驼峰命名法不是Pythonic)并且不在Python的json
模块中提供。 - 空白保留:JSON字符串中的空白不会保留。主要是因为JSON是一个不区分空白格式的格式,并且
serde-json
默认会将其删除。在实际应用中,这应该不会成为问题,因为你的应用程序不能依赖于空白填充,但是这是需要注意的一点。
基准测试
我们还不快。但话说回来,我们还没有进行任何大的优化。从长远来看,我们可能会探索新CPU的功能,如多核和SIMD。这是其他(基于C的)JSON扩展尚未触及的领域,因为这可能会使代码更难调试并且容易产生竞态条件。在Rust中,这由于像faster或rayon这样的crate变得可行。
因此,以下测量结果可能会很快得到改进。
如果你想帮忙,请查看下面开发环境部分中的说明。
测试机器
MacBook Pro 15英寸,2015年中,2.2 GHz Intel Core i7,16 GB RAM,Darwin 17.6.18
欢迎贡献力量!
如果你想修改hyperjson,以下是需要完成的工作
- 实现
loads()
- 实现
load()
- 实现
dumps()
- 实现
dump()
- 与json和ujson(见#1)进行基准测试
- 添加CI/CD流水线,以便更容易进行测试(见#2)
- 将其创建为适当的pip包,以简化安装(见#3)。
- 分析和优化性能(见#16)
- 将剩余的关键字只参数添加到方法中
只需选择一个未解决的票据。如果你愿意,我们可以提供指导。:smiley
开发者指南
本项目使用pipenv来管理开发环境。如果你还没有安装,请运行
pip install poetry
本项目需要Rust的nightly
版本。
通过rustup
安装它
rustup install nightly
如果你已经安装了nightly
版本,请确保它是最新的
rustup update nightly
之后,你可以使用以下命令编译hyperjson的当前版本,并执行所有测试和基准测试
make install
make test
make bench
🤫 嘘!...运行make help
以了解更多。
绘制漂亮的图表
为了重新创建基准测试直方图,你首先需要一些额外的先决条件
在macOS上,请将以下内容添加到你的~/.matplotlib/matplotlibrc
(参考)
backend: TkAgg
之后,运行以下命令
make plot
许可证
hyperjson根据以下之一进行许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或https://open-source.org.cn/licenses/MIT)
任选。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义,你提交给hyperjson的任何有意贡献,都将双许可如上所述,不附加任何额外条款或条件。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
hyperjson-0.2.4-cp38-none-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf70d244f0bce0db4a6d0cb2958dcf14283045f17098831f5e8ef34b3d4a67a8 |
|
MD5 | 5a2508d0977d0de6a0b321f43e71fb6e |
|
BLAKE2b-256 | d1ee32eff3ee2754b1713409478052b01bfac7020cff45fa56417fa6451c0d56 |
hyperjson-0.2.4-cp38-cp38-manylinux1_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4451c5b85471a14d5d8ee1764e2622301979bf41da9be95472fb279f0c5db4b6 |
|
MD5 | 1d9f3061a97cdd3b53e6612474adcac9 |
|
BLAKE2b-256 | 14dc746513b710a32f7e3529ad26d4d0133107f3bed9096c0a3d96920775868a |
hyperjson-0.2.4-cp38-cp38-macosx_10_7_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 59ebe0e4b8f1a97c078cc5a7d214c59eda24acc1e530ae9f26a4148e26cca9e6 |
|
MD5 | 5a368556e9a571fb371c1f64f72aeeb2 |
|
BLAKE2b-256 | fb82718296dd66b194984e5e182d5646e096d0c4cc41ec13db2f7053ca7f8715 |
hyperjson-0.2.4-cp37-none-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e4ab23d72c3646a3053db049a14b1fdf79521e04d2db98b18dc0dc858de242e2 |
|
MD5 | 19d100cc24fae66b3e54678a13b06077 |
|
BLAKE2b-256 | a64f1392ef06faec75b80726816d9ca52d5ef0163f4f495f32201ba489ce38aa |
hyperjson-0.2.4-cp37-cp37m-manylinux1_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9b6f33593729c1ba5990c46f8d34e61d63670d15622c228663fe3528e4149ad |
|
MD5 | 41af9935603f052c3d1301a5e98b3590 |
|
BLAKE2b-256 | ad51008a732d3e92d44e9b358ab668df6a95303088f9374ae72a73f158f842ad |
hyperjson-0.2.4-cp37-cp37m-macosx_10_7_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 31b7287c8973ec92a14ced88f29b075568d884ec63a03a3bd18046ff445e085f |
|
MD5 | 6dec929d46eee09c6ea6d1961ffc9ecb |
|
BLAKE2b-256 | e3ce23dc13114354b496ed6680599a169790af2717281d9c2bb9204683944bb3 |
hyperjson-0.2.4-cp36-none-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fc70be6d7e0f4cef9e79e965400b8e6167caaa14305016e1226e92b3a6ec52ec |
|
MD5 | 722e3609b88246959abb7bc95a6d387a |
|
BLAKE2b-256 | c709b9dc6e67228236100df442e92ea38e2d28f7fe76c553aa9b492381540231 |
hyperjson-0.2.4-cp36-cp36m-manylinux1_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3342dd9296035d8f0670f09e246ab36fea1017c4dae73c24a418960ed1eb8beb |
|
MD5 | efd889486a6b2ff28a2ac532eacc97ed |
|
BLAKE2b-256 | 4625cc2b3f1dfd4c7b2e559e671472775a126a8a5044d49dc942bfde5c6e34eb |
哈希值 for hyperjson-0.2.4-cp36-cp36m-macosx_10_7_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 005dee52ee0646ecc2173199223e73a5a7a85cbfb9b888b0f4bc9e07906dd0ca |
|
MD5 | 115b1e8ba4e574f6be187b5a44ba623b |
|
BLAKE2b-256 | 823ac4b490b9e68fb899fca4e4071cfab5f7486b4056e298f630db7ec25905de |
哈希值 for hyperjson-0.2.4-cp35-cp35m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95a411e6460307fd51f51e387522ff1e0387a9dae7d1a4b5cdaa07fce7cd5e6f |
|
MD5 | 4a26cc628c690959b34876dbb78a5ecc |
|
BLAKE2b-256 | 91ceca2f48d4c31d31386719f30ea536d3a4308453e8dcb49079e87423b4a6a0 |
哈希值 for hyperjson-0.2.4-cp35-cp35m-macosx_10_7_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c222f8f613ad729336e1f01108f242cbd1cf8ef361a3cd2b69a21a470b5adff1 |
|
MD5 | 0907741c6e01a89f00a97628699b80a3 |
|
BLAKE2b-256 | a4346d19f99d9871fcc5fd01b97a7ddb33cbf7a20b98929d3d23f64286e6b8e1 |