22个版本
0.2.12 | 2024年3月17日 |
---|---|
0.2.11 | 2024年3月17日 |
0.1.8 | 2024年3月8日 |
0.1.7 | 2024年2月24日 |
0.1.4 | 2022年12月9日 |
#549 在 解析器实现
每月 1,077 次下载
690KB
766 行
jsonic
为Rust提供的无依赖项的快速小型JSON解析库
快速概览
jsonic 是一个JSON解析器。它的目标是提供高速的JSON数据提取。目前它不将JSON转换为结构体。
性能
以下是这个库的一些设计选择
- 小型数据结构以加快内存/缓存访问
- 使用混合数据结构的对象容器,使用数组存储少量键/值对,其他情况下使用二叉树映射
- 使用快速哈希键增强二叉树映射的插入/检索速度
- 没有数据复制,源文本数据永远不会被复制
- 按请求进行类型转换
jsonic 没有使用任何特定的指令集/平台特定优化,因此应该具有所有兼容Rust系统的可移植性能。
示例用法
fn main() {
let json = "{\"jsonic\": \"Fast, small JSON parsing library for rust with no dependencies\"}";
match jsonic::parse(json) {
Ok(parsed) => { println!("Describe jsonic? {:?}", parsed["jsonic"].as_str()); }
Err(error) => { eprintln!("{}", error); }
}
}
基准测试
要了解与其他用Rust编写的JSON解析引擎相比,jsonic 的解析性能,请使用 cargo bench
。
以下是在苹果iMac M1、8GB RAM、macOS Sonoma上的一个示例运行
Running benches/json-rust.rs (target/release/deps/json_rust-0d2370885fb224f4)
Timer precision: 41 ns
json_rust fastest │ slowest │ median │ mean │ samples │ iters
╰─ parse │ │ │ │ │
├─ ./benches/data/canada.json 5.66 ms │ 6.038 ms │ 5.781 ms │ 5.764 ms │ 100 │ 100
├─ ./benches/data/citm_catalog.json 2.028 ms │ 2.309 ms │ 2.05 ms │ 2.055 ms │ 100 │ 100
╰─ ./benches/data/twitter.json 823.4 µs │ 1.027 ms │ 832 µs │ 835.4 µs │ 100 │ 100
Running benches/jsonic.rs (target/release/deps/jsonic-0031ab613974bf81)
Timer precision: 41 ns
jsonic fastest │ slowest │ median │ mean │ samples │ iters
╰─ parse │ │ │ │ │
├─ ./benches/data/canada.json 2.519 ms │ 3.089 ms │ 2.549 ms │ 2.565 ms │ 100 │ 100
├─ ./benches/data/citm_catalog.json 1.453 ms │ 1.633 ms │ 1.477 ms │ 1.479 ms │ 100 │ 100
╰─ ./benches/data/twitter.json 555.3 µs │ 658.9 µs │ 560.5 µs │ 563.2 µs │ 100 │ 100
Running benches/serde_json.rs (target/release/deps/serde_json-b37e83074b30325e)
Timer precision: 41 ns
serde_json fastest │ slowest │ median │ mean │ samples │ iters
╰─ parse │ │ │ │ │
├─ ./benches/data/canada.json 4.489 ms │ 4.977 ms │ 4.561 ms │ 4.58 ms │ 100 │ 100
├─ ./benches/data/citm_catalog.json 2.177 ms │ 2.961 ms │ 2.223 ms │ 2.231 ms │ 100 │ 100
╰─ ./benches/data/twitter.json 1.031 ms │ 1.203 ms │ 1.041 ms │ 1.046 ms │ 100 │ 100
Running benches/simd-json.rs (target/release/deps/simd_json-274159a472ebf0bc)
Timer precision: 41 ns
simd_json fastest │ slowest │ median │ mean │ samples │ iters
╰─ parse │ │ │ │ │
├─ ./benches/data/canada.json 5.494 ms │ 6.828 ms │ 5.709 ms │ 5.716 ms │ 100 │ 100
├─ ./benches/data/citm_catalog.json 2.695 ms │ 3.883 ms │ 2.766 ms │ 2.78 ms │ 100 │ 100
╰─ ./benches/data/twitter.json 1.114 ms │ 1.726 ms │ 1.127 ms │ 1.162 ms │ 100 │ 100
Running benches/sonic-rs.rs (target/release/deps/sonic_rs-0ab724f2d9eb477b)
Timer precision: 41 ns
sonic_rs fastest │ slowest │ median │ mean │ samples │ iters
╰─ parse │ │ │ │ │
├─ ./benches/data/canada.json 4.104 ms │ 4.794 ms │ 4.196 ms │ 4.217 ms │ 100 │ 100
├─ ./benches/data/citm_catalog.json 1.783 ms │ 2.662 ms │ 1.815 ms │ 1.845 ms │ 100 │ 100
╰─ ./benches/data/twitter.json 817.2 µs │ 1.025 ms │ 834 µs │ 834.5 µs │ 100 │ 100