#serde-json #canonical #json #serde

serde_canonical_json

Implements a CanonicalFormatter for serde_json

1 stable release

1.0.0 Mar 7, 2023

#1205 in Encoding

Download history 32/week @ 2024-09-23 120/week @ 2024-09-30 188/week @ 2024-10-07 133/week @ 2024-10-14 131/week @ 2024-10-21 141/week @ 2024-10-28 96/week @ 2024-11-04 116/week @ 2024-11-11

485 downloads per month

MIT license

26KB
710 lines

serde_canonical_json

This crate provides a Canonical JSON formatter for serde_json.

Usage

use serde::Serialize;
use serde_json::Serializer;
use serde_canonical_json::CanonicalFormatter;


#[derive(Serialize)]
struct Data
{
    c: isize,
    b: bool,
    a: String,
}


fn main()
{
    let data = Data { c: 120, b: false, a: "Hello!".to_owned() };

    let mut ser = Serializer::with_formatter(Vec::new(), CanonicalFormatter::new());

    data.serialize(&mut ser).expect("Failed to serialize");
    
    let json = String::from_utf8(ser.into_inner()).expect("Failed to convert buffer to string");

    assert_eq!(json, r#"{"a":"Hello!","b":false,"c":120}"#);
}

lib.rs:

serde_canonical_json

This crate provides a Canonical JSON formatter for serde_json.

Usage

use serde::Serialize;
use serde_json::Serializer;
use serde_canonical_json::CanonicalFormatter;

// CanonicalFormatter will ensure our keys are in lexical order
#[derive(Serialize)]
struct Data
{
    c: isize,
    b: bool,
    a: String,
}

let data = Data { c: 120, b: false, a: "Hello!".to_owned() };

let mut ser = Serializer::with_formatter(Vec::new(), CanonicalFormatter::new());

data.serialize(&mut ser).unwrap();

let json = String::from_utf8(ser.into_inner()).unwrap();

assert_eq!(json, r#"{"a":"Hello!","b":false,"c":120}"#);

Dependencies

~2.7–4MB
~75K SLoC