#json #serde-json #deserialize-json #canonical #specification #tuf #olpc

bin+lib olpc-cjson

serde_json Formatter to serialize as OLPC-style canonical JSON

5 releases

0.1.4 Oct 10, 2024
0.1.3 Mar 3, 2023
0.1.2 Oct 3, 2022
0.1.1 Jul 30, 2021
0.1.0 Nov 9, 2019

#121 in Encoding

Download history 14875/week @ 2024-09-20 14179/week @ 2024-09-27 15931/week @ 2024-10-04 17722/week @ 2024-10-11 19952/week @ 2024-10-18 19141/week @ 2024-10-25 16525/week @ 2024-11-01 14407/week @ 2024-11-08 16563/week @ 2024-11-15 15312/week @ 2024-11-22 16529/week @ 2024-11-29 15949/week @ 2024-12-06 16282/week @ 2024-12-13 10069/week @ 2024-12-20 9262/week @ 2024-12-27 8910/week @ 2025-01-03

47,274 downloads per month
Used in 75 crates (7 directly)

MIT/Apache

23KB
353 lines

olpc-cjson provides a serde_json::Formatter to serialize data as canonical JSON, as defined by OLPC and used in TUF. It is developed as part of tough, a Rust library for using TUF repositories.

OLPC's canonical JSON specification is subtly different from other "canonical JSON" specifications, and is also not a strict subset of JSON (specifically, ASCII control characters 0x00–0x1f are printed literally, which is not valid JSON). Therefore, serde_json cannot necessarily deserialize JSON produced by this formatter.

This crate is not developed or endorsed by OLPC; use of the term is solely to distinguish this specification of canonical JSON from other specifications of canonical JSON.

use olpc_cjson::CanonicalFormatter;
use serde::Serialize;
use serde_json::json;

let value = json!({"b": 12, "a": "qwerty"});
let mut buf = Vec::new();
let mut ser = serde_json::Serializer::with_formatter(&mut buf, CanonicalFormatter::new());
value.serialize(&mut ser).unwrap();
assert_eq!(buf, br#"{"a":"qwerty","b":12}"#);

Dependencies

~1.4–2MB
~54K SLoC