#simd #json #bindings #error #on-demand #dom #simdjson

simdjson-rust

Rust 对 simdjson 项目的绑定

4 个版本

0.3.0-alpha.22023年8月26日
0.3.0-alpha.12023年8月25日
0.2.0-alpha2023年6月22日

#786硬件支持

Download history 1/week @ 2024-03-17 12/week @ 2024-03-31 1/week @ 2024-05-26 1/week @ 2024-06-02

69 每月下载量
用于 cleora

Apache-2.0

2MB
31K SLoC

C++ 29K SLoC // 0.3% comments Rust 2K SLoC // 0.0% comments

simdjson-rust

Github Actions Crates.io docs.rs

此crate目前使用 simdjson 3.2.3。您可以尝试并反馈。

如果您

  • 发现某些API缺失
  • 遇到内存错误
  • 体验性能下降

请提交问题。

使用方法

将以下内容添加到您的 Cargo.toml

# In the `[dependencies]` section
simdjson-rust = "0.3.0"

然后开始。

use simdjson_rust::prelude::*;
use simdjson_rust::{dom, ondemand};

fn main() -> simdjson_rust::Result<()> {
    let ps = make_padded_string("[0,1,2,3]");

    // ondemand api.
    {
        let mut parser = ondemand::Parser::default();
        let mut doc = parser.iterate(&ps)?;
        let mut array = doc.get_array()?;
        for (index, value) in array.iter()?.enumerate() {
            assert_eq!(index as u64, value?.get_uint64()?);
        }
    }

    // dom api.
    {
        let mut parser = dom::Parser::default();
        let elem = parser.parse(&ps)?;
        let arr = elem.get_array()?;
        for (index, value) in arr.iter().enumerate() {
            assert_eq!(index as u64, value.get_uint64()?);
        }
    }

    Ok(())
}

domondemand

simdjson 现在提供两种API,domondemanddom 将解析整个字符串,而 ondemand 只解析您请求的部分。由于 ffiondemand API的开销相对较高。我已经测试了 lto,但它只略有改进 :(

因此建议

  • 如果您只想访问大型JSON的一个特定部分,使用 ondemand
  • 如果您想解析整个JSON,使用 dom

padded_string

simdjson 需要输入字符串进行填充。我们必须提供具有 capacity = len + SIMDJSON_PADDING 的字符串。我们提供了相应的工具。

use simdjson_rust::prelude::*;

fn main() -> simdjson_rust::Result<()> {
    let ps = make_padded_string("[0,1,2,3]");
    let ps = "[0,1,2,3]".to_padded_string();
    // or reuse a buffer.
    let unpadded = String::from("[1,2,3,4]");
    let ps = unpadded.into_padded_string();
    // or load from file.
    let ps = load_padded_string("test.json")?;
    Ok(())
}

依赖项

~0.3–2.9MB
~60K SLoC