trailofbits/rfc8785.py
GitHub: trailofbits/rfc8785.py
RFC 8785 JSON 规范化方案(JCS)的纯 Python 无依赖实现,确保 JSON 序列化结果的字节级一致性。
Stars: 12 | Forks: 4
# rfc8785.py
[](https://github.com/trailofbits/rfc8785.py/actions/workflows/tests.yml)
[](https://pypi.org/project/rfc8785)
[](https://repology.org/project/python:rfc8785/versions)
[RFC 8785](即 JSON Canonicalization Scheme 或 JCS)的纯 Python、无依赖实现。
本实现在行为上应与 [Andrew Rundgren 的参考实现] 相当,但增加了以下限制:
1. 本实现不会透明地将非 `str` 字典键转换为字符串。用户必须显式执行此转换。
2. 不支持缩进、格式化美化等。输出始终采用最小化编码。
3. 所有 API 均生成 UTF-8 编码的 `bytes` 对象或 `bytes` I/O。
## 安装说明
```
python -m pip install rfc8785
```
## 使用说明
完整的 API 文档请见[此处]。
```
import rfc8785
foo = {
"key": "value",
"another-key": 2,
"a-third": [1, 2, 3, [4], (5, 6, "this works too")],
"more": [None, True, False],
}
rfc8785.dumps(foo)
```
生成:
```
b'{"a-third":[1,2,3,[4],[5,6,"this works too"]],"another-key":2,"key":"value","more":[null,true,false]}'
```
如需直接序列化到 I/O 接收端,请改用 `rfc8785.dump`:
```
import rfc8785
with open("/some/file", mode="wb") as io:
rfc8785.dump([1, 2, 3, 4], io)
```
所有 API 在序列化失败时都会引发 `rfc8785.CanonicalizationError` 或其子类异常。
## 许可协议
Apache License, Version 2.0。
如另有说明,本实现的部分内容改编自 [Andrew Rundgren 的参考实现],后者同样基于 Apache License, Version 2.0 授权。
标签:JSON, Python, RFC 8785, 开发库, 数据序列化, 无后门, 标准化, 逆向工具