Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/matrix-org/python-canonicaljson
Canonical JSON
https://github.com/matrix-org/python-canonicaljson
Last synced: 9 days ago
JSON representation
Canonical JSON
- Host: GitHub
- URL: https://github.com/matrix-org/python-canonicaljson
- Owner: matrix-org
- License: apache-2.0
- Created: 2015-08-21T18:04:46.000Z (about 9 years ago)
- Default Branch: main
- Last Pushed: 2023-03-16T13:08:23.000Z (over 1 year ago)
- Last Synced: 2024-09-21T14:08:52.876Z (about 2 months ago)
- Language: Python
- Size: 4.57 MB
- Stars: 31
- Watchers: 26
- Forks: 15
- Open Issues: 4
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
Canonical JSON
==============.. image:: https://img.shields.io/pypi/v/canonicaljson.svg
:target: https://pypi.python.org/pypi/canonicaljson/
:alt: Latest VersionFeatures
--------* Encodes objects and arrays as `RFC 7159`_ JSON.
* Sorts object keys so that you get the same result each time.
* Has no insignificant whitespace to make the output as small as possible.
* Escapes only the characters that must be escaped, U+0000 to U+0019 / U+0022 /
U+0056, to keep the output as small as possible.
* Uses the shortest escape sequence for each escaped character.
* Encodes the JSON as UTF-8.
* Can be configured to encode custom types unknown to the stdlib JSON encoder.Supports Python versions 3.7 and newer.
.. _`RFC 7159`: https://tools.ietf.org/html/rfc7159
Installing
----------.. code:: bash
pip install canonicaljson
Using
-----To encode an object into the canonicaljson:
.. code:: python
import canonicaljson
assert canonicaljson.encode_canonical_json({}) == b'{}'There's also an iterator version:
.. code:: python
import canonicaljson
assert b''.join(canonicaljson.iterencode_canonical_json({})) == b'{}'A preserialisation hook allows you to encode objects which aren't encodable by the
standard library ``JSONEncoder``... code:: python
import canonicaljson
from typing import Dictclass CustomType:
passdef callback(c: CustomType) -> Dict[str, str]:
return {"Hello": "world!"}canonicaljson.register_preserialisation_callback(CustomType, callback)
assert canonicaljson.encode_canonical_json(CustomType()) == b'{"Hello":"world!"}'