Skip to main content

Canonical JSON

Project description

Latest Version

Features

  • 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.

Installing

pip install canonicaljson

Using

To encode an object into the canonicaljson:

import canonicaljson
assert canonicaljson.encode_canonical_json({}) == b'{}'

There’s also an iterator version:

import canonicaljson
assert b''.join(canonicaljson.iterencode_canonical_json({})) == b'{}'

The underlying JSON implementation can be chosen with the following:

import json
import canonicaljson
canonicaljson.set_json_library(json)

A preserialisation hook allows you to encode objects which aren’t encodable by the standard library JSONEncoder.

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!"}'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

canonicaljson-2.0.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

canonicaljson-2.0.0-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file canonicaljson-2.0.0.tar.gz.

File metadata

  • Download URL: canonicaljson-2.0.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for canonicaljson-2.0.0.tar.gz
Algorithm Hash digest
SHA256 e2fdaef1d7fadc5d9cb59bd3d0d41b064ddda697809ac4325dced721d12f113f
MD5 ea60a3f3c99e3382c62606f86c08caae
BLAKE2b-256 a8f22835b7ab464988d1f85e351a19c4d6b2e4c317ba8484ebd2a311850eab8c

See more details on using hashes here.

Provenance

File details

Details for the file canonicaljson-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for canonicaljson-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c38a315de3b5a0532f1ec1f9153cd3d716abfc565a558d00a4835428a34fca5b
MD5 1179236239f9d7350bc59f9d027d2e6d
BLAKE2b-256 e554346f681c24a9c3a08e2e74dcee2555ccd1081705b46f791f7b228e177d06

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page