#serde-json #json #decompression

compress-json-rs

Store JSON data in a space-efficient compressed form, with round-trip compression/decompression

1 unstable release

Uses new Rust 2024

new 0.1.0 Apr 21, 2025

#270 in Compression

Download history 102/week @ 2025-04-16

102 downloads per month

BSD-2-Clause

17KB
342 lines

compress-json-rs

crates.io docs.rs

AI-driven Rust port of the JavaScript compress-json library by Beenotung. Store JSON data in a space-efficient compressed form with lossless round-trip compression and decompression.

Features

  • Supports all JSON types: objects, arrays, strings, numbers, booleans, and null
  • Deduplicates repeated values and keys for optimal size
  • Encodes numbers in compact base-62 format
  • Zero-copy round-trip using serde_json::Value
  • Fast in-memory compression; no disk or network dependencies

Installation

Add to your Cargo.toml:

[dependencies]
compress-json-rs = "0.1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

Quick Start

use compress_json_rs::{compress, decompress};
use serde_json::{json, Value};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Original JSON data
    let data: Value = json!({
        "user": "Alice",
        "active": true,
        "roles": ["admin", "user"]
    });

    // Compress into (values, root_key)
    let compressed = compress(&data);

    // Serialize compressed form for storage or transmission
    let serialized = serde_json::to_string(&compressed)?;

    // ...later, deserialize and decompress
    let (values, root): (Vec<String>, String) = serde_json::from_str(&serialized)?;
    let restored = decompress((values, root));

    assert_eq!(restored, data);
    println!("Round-trip successful: {}", restored);
    Ok(())
}

API Reference

/// Compressed representation: (values array, root key)
pub type Compressed = (Vec<String>, String);

/// Compress a JSON value into its compressed form
pub fn compress(o: &serde_json::Value) -> Compressed;

/// Decompress a compressed form back into JSON
pub fn decompress(c: Compressed) -> serde_json::Value;

See docs.rs for full lower-level API details.

License

Licensed under the BSD-2-Clause license. See LICENSE for details.

Dependencies

~0.6–1.5MB
~32K SLoC