5个版本 (破坏性更新)
0.5.0 | 2022年12月27日 |
---|---|
0.4.0 | 2021年3月22日 |
0.3.0 | 2020年11月3日 |
0.2.0 | 2020年8月31日 |
0.1.0 | 2020年8月17日 |
#542 in 文本处理
每月下载量563次
用于 12 个crate(直接使用3个)
20KB
336 行
规范JSON库
规范JSON是JSON的一种变体,其中每个值都有一个唯一、明确的序列化形式。这为编码数据提供了有意义且可重复的哈希。
规范JSON可以由常规JSON解析器解析。与通常的JSON格式(RFC 7159 或 serde_json::to_string()
)相比,最显著的差异是
- 对象键必须按字典顺序出现且不得重复
- 没有单词间的空白
- Unicode字符和转义字符将被转义
此库遵循gibson的规范JSON规范。
用法
将以下内容添加到您的Cargo.toml
[dependencies]
canonical_json = "0.5.0"
示例
use serde_json::json;
use canonical_json::ser::to_string;
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"]"
}
测试套件
运行项目测试套件
$ cargo test
运行@gibson042的规范JSON测试套件
$ git clone [email protected]:gibson042/canonicaljson-spec.git
$ cd canonicaljson-spec/
$ ./test.sh ../canonicaljson-rs/demo/target/debug/demo
一些已知错误
孤立的代理字符在十六进制转义
数值超出范围
非-输入后出现非896字符: "\u6} 代理对\u2014U+1D306
另请参阅
- python-canonicaljson-rs:此crate的Python绑定
- CanonicalJSON.jsm在Gecko中
- Remote Settings中的原始python实现
- https://github.com/matrix-org/python-canonicaljson/(使用
\xDD
而不是\uDDDD
来编码Unicode)
许可证
MIT许可证
依赖
~2.9–4.5MB
~87K SLoC