9 个不稳定版本 (3 个重大变更)

0.4.4 2022年12月4日
0.4.3 2022年11月30日
0.4.2 2022年10月4日
0.4.1 2022年9月25日
0.1.0 2022年5月9日

#1055 in 解析器实现

Download history 1883/week @ 2024-03-14 3226/week @ 2024-03-21 2471/week @ 2024-03-28 2306/week @ 2024-04-04 2408/week @ 2024-04-11 2562/week @ 2024-04-18 2859/week @ 2024-04-25 2561/week @ 2024-05-02 2502/week @ 2024-05-09 2441/week @ 2024-05-16 2409/week @ 2024-05-23 2535/week @ 2024-05-30 2205/week @ 2024-06-06 2427/week @ 2024-06-13 2045/week @ 2024-06-20 2253/week @ 2024-06-27

9,432 每月下载量
用于 8 个 crate (4 个直接使用)

Apache-2.0

22KB
482

test codecov

Rust 本地 JSON 反序列化器

该仓库包含一个通过引用解析 JSON 的 Rust 实现的高性能库。

为什么不使用 serde-json

serde-json 既是基于 serde 模型的 JSON 解析器,也是数据模型(Value)。Value 是一个拥有数据的结构。

在许多用例中,JSON 可以解析为引用。特别是,当 JSON 字符串包含非 ASCII 字符时,才需要字符串的所有权。

如果可能,通过引用而不是通过值解析 JSON,则存在性能机会。

此 crate 填补了这一空白。在解析例如字符串列表时,此 crate 的速度比 serde-json 快 ~2 倍(见下文)。

安全性

此 crate 是 #![forbid(unsafe_code)],并且仅在失败分配时引发恐慌。

基准测试

运行

python3 write_bench_files.py && cargo bench --bench parse

serde_json 进行比较。总的来说,此 crate 要么更快,要么与它一样快。一些示例

布尔数组

bool json_deserializer 2^20   time:   [26.022 ms 26.056 ms 26.090 ms]
bool serde_json 2^20          time:   [30.419 ms 30.468 ms 30.516 ms]
bool simd_json 2^20           time:   [31.440 ms 31.486 ms 31.531 ms] 

字符串数组

string json_deserializer 2^18 time:   [10.106 ms 10.138 ms 10.173 ms]
string serde_json 2^18        time:   [23.177 ms 23.209 ms 23.243 ms]
string simd_json 2^18         time:   [10.924 ms 10.941 ms 10.959 ms]

# with `RUSTFLAGS='-C target-cpu=native'` (skilake in this case)
string simd_json 2^18         time:   [8.0735 ms 8.0887 ms 8.1046 ms]

包含字符串的对象数组

object_string json_deserializer 2^14
                        time:   [2.7631 ms 2.7681 ms 2.7736 ms]
object_string serde_json 2^14
                        time:   [4.3729 ms 4.3823 ms 4.3922 ms]
object_string simd_json 2^14
                        time:   [2.6313 ms 2.6357 ms 2.6401 ms]

包含布尔值的对象数组

object_bool json_deserializer 2^10
                        time:   [144.14 us 144.35 us 144.62 us]
object_bool serde_json 2^10
                        time:   [197.12 us 197.62 us 198.31 us]
object_bool simd_json 2^10
                        time:   [160.87 us 161.33 us 161.77 us]

依赖关系

~185KB