A pure-Python, no-dependency implementation of RFC 8785, a.k.a. JSON Canonicalization Scheme or JCS.
This implementation should be behaviorally comparable to Andrew Rundgren's reference implementation, with the following added constraints:
- This implementation does not transparently convert non-
str
dictionary keys into strings. Users must explicitly perform this conversion. - No support for indentation, pretty-printing, etc. is provided. The output is always minimally encoded.
- All APIs produce UTF-8-encoded
bytes
objects orbytes
I/O.
python -m pip install rfc8785
See the full API documentation here.
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)
yields:
b'{"a-third":[1,2,3,[4],[5,6,"this works too"]],"another-key":2,"key":"value","more":[null,true,false]}'
For direct serialization to an I/O sink, use rfc8785.dump
instead:
import rfc8785
with open("/some/file", mode="wb") as io:
rfc8785.dump([1, 2, 3, 4], io)
All APIs raise rfc8785.CanonicalizationError
or a subclass on serialization failures.
Apache License, Version 2.0.
Where noted, parts of this implementation are adapted from Andrew Rundgren's reference implementation, which is also licensed under the Apache License, Version 2.0.