#json-parser #数据 #提取 #语言

jsonic

为Rust提供的无依赖项的快速小型JSON解析库

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解析器实现

Download history 118/week @ 2024-03-31 5/week @ 2024-06-02

每月 1,077 次下载

MIT/Apache

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

无运行时依赖项