Canonical JSON library

Canonical JSON is a variant of JSON in which each value has a single, unambiguous serialized form. This provides meaningful and repeatable hashes of encoded data.

Canonical JSON can be parsed by regular JSON parsers. The most notable differences compared to usual JSON format (RFC 7159 or serde_json::to_string()) are:

This library follows gibson's Canonical JSON spec.

Usage

Add this to your Cargo.toml:

toml [dependencies] canonical_json = "0.1.0"

Examples

```rust,norun use serdejson::json; use canonicaljson::ser::tostring;

fn main() { to_string(&json!(null)); // returns "null"

 to_string(&json!("we ❤ Rust")); // returns "we \u2764 Rust""

 to_string(&json!(10.0_f64.powf(21.0))); // returns "1e+21"

 to_string(&json!({
     "a": "a",
     "id": "1",
     "b": "b"
 })); // returns "{"a":"a","b":"b","id":"1"}"; (orders object keys)

 to_string(&json!(vec!["one", "two", "three"])); // returns "["one","two","three"]"

} ```

Test suite

Run the projet test suite:

$ cargo test

Run @gibson042's Canonical JSON test suite:

$ git clone git@github.com:gibson042/canonicaljson-spec.git $ cd canonicaljson-spec/ $ ./test.sh ../canonicaljson-rs/demo/target/debug/demo

Some known errors:

See also

License

Licensed under MIT