matrix-org / python-canonicaljson

Canonical JSON
Apache License 2.0
31 stars 15 forks source link

Canonical JSON

.. image:: https://img.shields.io/pypi/v/canonicaljson.svg :target: https://pypi.python.org/pypi/canonicaljson/ :alt: Latest Version

Features

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 Dict

class CustomType:
    pass

def callback(c: CustomType) -> Dict[str, str]:
    return {"Hello": "world!"}

canonicaljson.register_preserialisation_callback(CustomType, callback)
assert canonicaljson.encode_canonical_json(CustomType()) == b'{"Hello":"world!"}'