3 个版本

0.1.2 2021 年 10 月 2 日
0.1.1 2020 年 6 月 20 日
0.1.0 2019 年 11 月 9 日

编码 中排名 893

Download history 143/week @ 2024-03-14 245/week @ 2024-03-21 385/week @ 2024-03-28 685/week @ 2024-04-04 1216/week @ 2024-04-11 911/week @ 2024-04-18 472/week @ 2024-04-25 237/week @ 2024-05-02 154/week @ 2024-05-09 370/week @ 2024-05-16 280/week @ 2024-05-23 410/week @ 2024-05-30 101/week @ 2024-06-06 304/week @ 2024-06-13 251/week @ 2024-06-20 108/week @ 2024-06-27

每月下载量 807
用于 2 crates

MIT 许可证

125KB
259

Rust 的规范化 JSON 序列化

Build and Test docs.rs Crates.io

这是一个尝试符合 OLPC 规范化 JSON 最小规范 的规范化 JSON 序列化器实现。此外,该实现还尝试与 Docker 和 Notary 生态系统中使用的 Go 规范化 JSON 实现 完全兼容。如果您发现序列化结果存在不一致,请提交一个 issue。

示例 - 读取 JSON 文件并打印其规范化表示

let res: serde_json::Value =
    serde_json::from_reader(input).expect("cannot deserialize input file");

println!(
    "{}",
    cjson::to_string(&res).expect("cannot write canonical JSON")
);

注意:此 crate 旨在始终可编译为 wasm32-unknown-unknownwasm32-wasi 目标。

构建和贡献

本项目欢迎各种类型的贡献,尤其是额外的测试用例。

构建

$ cargo build
$ cargo test

testdata 目录的结构如下

  • 在目录的根目录下是 JSON 文件,其名称由其规范化 JSON 表示的 SHA256 摘要表示,该摘要使用 github.com/docker/go/canonical 包计算。测试用例将使用在序列化后获得的 SHA256 摘要,并与文件名进行比较,预计它们应该是相等的。

要添加新的测试用例,您可以使用 canonjson 二进制文件,这是一个 Go 规范化 JSON 实现的 CLI 包装器

$ go get github.com/technosophos/canonjson
$ canonjson target-file.json | sha256sum

在此阶段,将 target-file.json 重命名为 <computed-SHA256>.json,并将其移动到 testdata 目录的根目录。

  • errors 子目录包含有效的 JSON 文件(如果文件不是有效的 JSON 文件,测试将失败),但其中包含规范化 JSON 中不允许的字符,因此尝试在规范化 JSON 中表示它们应产生错误。

最后,scripts/integration.sh 脚本包含了对 main.rs 中 CLI 的非常基础的测试——并将从那里获得的摘要与使用 Go 实现序列化获得的摘要进行比较。理想情况下,我们还会添加更多用于测试的规范 JSON 实现。请注意,您还需要之前使用的 canonjson 二进制文件来执行此脚本。

注释和致谢

  • 此实现最初基于在 Rust TUF crate 中使用的规范 JSON 序列化。

依赖项

~0.7–1.4MB
~32K SLoC