Skip to main content

A Python library for compressing and decompressing JSON data using Brotli

Project description

JSONBrotliMinifyer

A Python library for compressing and decompressing JSON data using the Brotli compression algorithm.

Features

  • Compress JSON-serializable Python objects (dicts, lists, strings, numbers, etc.) into compact byte representations.
  • Decompress Brotli-compressed data back to the original JSON objects.
  • Compress and decompress JSON files directly with atomic write operations to prevent data corruption.
  • Efficient lossless compression suitable for data storage and transmission.

Installation

Install the library using pip:

pip install jsonbrotliminifyer

Or install from source:

git clone https://github.com/egorserdyuk/JSONBrotliMinifyer.git
cd JSONBrotliMinifyer
pip install -e .

Usage

import jsonbrotliminifyer

# Original JSON data
data = {
    "name": "John Doe",
    "age": 30,
    "items": ["apple", "banana", "cherry"],
    "active": True
}

# Compress the data (with default quality 11)
compressed = jsonbrotliminifyer.compress_json(data)
print(f"Compressed size: {len(compressed)} bytes")

# Compress with custom quality (0-11, lower = faster but larger)
compressed_fast = jsonbrotliminifyer.compress_json(data, quality=0)
print(f"Fast compression size: {len(compressed_fast)} bytes")

# Decompress the data
decompressed = jsonbrotliminifyer.decompress_json(compressed)
print(decompressed)  # Should match the original data

File Compression

import jsonbrotliminifyer

# Compress a JSON file (with default quality 11)
jsonbrotliminifyer.compress_json_file('input.json', 'output.br')

# Compress with custom quality
jsonbrotliminifyer.compress_json_file('input.json', 'output_fast.br', quality=0)

# Decompress a compressed file back to JSON
jsonbrotliminifyer.decompress_json_file('output.br', 'restored.json')

Command Line Interface

After installation, you can use the jsonbrotlim command to compress and decompress JSON data from the command line.

Compress JSON data

# Compress a JSON file
jsonbrotlim compress --input-file input.json --output-file output.br

# Compress with custom quality (0-11)
jsonbrotlim compress --input-file input.json --output-file output.br --quality 0

# Compress JSON from stdin
echo '{"name": "test"}' | jsonbrotlim compress > output.br

Decompress JSON data

# Decompress a compressed file
jsonbrotlim decompress --input-file output.br --output-file restored.json

# Decompress from stdin
cat output.br | jsonbrotlim decompress

API

compress_json(json_obj, quality=11)

Compresses a JSON-serializable Python object.

  • Parameters:
    • json_obj - Any JSON-serializable Python object
    • quality - Compression quality level (0-11), default 11 (best compression)
  • Returns: bytes - The compressed data
  • Raises: ValueError - If quality is not between 0 and 11

decompress_json(compressed_bytes)

Decompresses Brotli-compressed data back to the original JSON object.

  • Parameters: compressed_bytes - The compressed data as bytes
  • Returns: The original Python object
  • Raises: ValueError - If the data is not valid Brotli-compressed data or does not decode to valid JSON

compress_json_file(input_path, output_path, quality=11)

Compresses a JSON file using Brotli compression.

  • Parameters:
    • input_path - Path to the input JSON file
    • output_path - Path to the output compressed file
    • quality - Compression quality level (0-11), default 11 (best compression)
  • Raises: ValueError - If the input file does not exist, is not readable, contains invalid JSON, or if writing to the output file fails

decompress_json_file(input_path, output_path)

Decompresses a Brotli-compressed file back to a JSON file.

  • Parameters:
    • input_path - Path to the input compressed file
    • output_path - Path to the output JSON file
  • Raises: ValueError - If the input file does not exist, is not readable, or if writing to the output file fails

Dependencies

  • Python >= 3.9
  • brotli - Python bindings for the Brotli compression library

Testing

Run the tests using unittest:

python -m unittest tests.test_jsonbrotliminifyer

Or using pytest

pytest tests/test_jsonbrotliminifyer.py

License

MIT License

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

jsonbrotliminifyer-1.1.2.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jsonbrotliminifyer-1.1.2-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file jsonbrotliminifyer-1.1.2.tar.gz.

File metadata

  • Download URL: jsonbrotliminifyer-1.1.2.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jsonbrotliminifyer-1.1.2.tar.gz
Algorithm Hash digest
SHA256 bfa92b9925d7f5cd2e143f7f2fb180139099482a103b954b5e2237a5b9104559
MD5 62c1d50a8fd3e19f201b46aaad464496
BLAKE2b-256 1d5cc89aff64cba80f5a4bda9032d5e4fe1d466f9905750fc6f23b4b67b53d20

See more details on using hashes here.

File details

Details for the file jsonbrotliminifyer-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for jsonbrotliminifyer-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e24338d11ea5e64316da9769dbd22e4fc3a5271fa2658fbb36ae3aec7687820f
MD5 10f60fc3a3e019a06ddcdd25dd4043f1
BLAKE2b-256 01b836b007803378d66872a8a0d88388279bbc516a8e7c236e0c7793365930f4

See more details on using hashes here.

Supported by

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