4 个版本
0.3.0-alpha.2 | 2023年8月26日 |
---|---|
0.3.0-alpha.1 | 2023年8月25日 |
0.2.0-alpha | 2023年6月22日 |
#786 在 硬件支持
69 每月下载量
用于 cleora
2MB
31K SLoC
simdjson-rust
此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(())
}
dom
和 ondemand
simdjson
现在提供两种API,dom
和 ondemand
。dom
将解析整个字符串,而 ondemand
只解析您请求的部分。由于 ffi
,ondemand
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