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 文本处理

Download history 94/week @ 2024-03-13 125/week @ 2024-03-20 141/week @ 2024-03-27 138/week @ 2024-04-03 100/week @ 2024-04-10 103/week @ 2024-04-17 89/week @ 2024-04-24 80/week @ 2024-05-01 89/week @ 2024-05-08 87/week @ 2024-05-15 84/week @ 2024-05-22 134/week @ 2024-05-29 136/week @ 2024-06-05 115/week @ 2024-06-12 121/week @ 2024-06-19 173/week @ 2024-06-26

每月下载量563次
用于 12 个crate(直接使用3个)

MIT 许可证

20KB
336

规范JSON库

规范JSON是JSON的一种变体,其中每个值都有一个唯一、明确的序列化形式。这为编码数据提供了有意义且可重复的哈希。

规范JSON可以由常规JSON解析器解析。与通常的JSON格式(RFC 7159serde_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

另请参阅

许可证

MIT许可证

依赖

~2.9–4.5MB
~87K SLoC