9 个版本
0.2.10 | 2024年5月6日 |
---|---|
0.2.9 | 2024年5月6日 |
0.2.7 | 2024年3月15日 |
0.2.5 | 2024年2月22日 |
0.1.1 |
|
#1405 in 编码
19KB
515 代码行
JsonIT (Json Iterator)
创建此crate是为了尽可能简化在数组内部流中流式传输 Json 对象。它应该类似于 Python 中的 ijson 包。
类似于 ijson 包,您必须指定一个前缀,以便库可以找到您想要解析的数组。
与迭代器一起使用
为了解析 std::Iterator,您可以使用此函数
pub fn stream_read_items_at<T>(iterator: impl Iterator<Item = String> + 'static, prefix: String) -> impl Iterator<Item = serde_json::Result<T>>
where
T: DeserializeOwned,
如示例所示
fn load_as_chars() -> impl Iterator<Item = u8> {
let f = File::open("./tests/test.json").expect("failed to read test file");
let b = BufReader::new(f);
let reader = ReaderIter::new(b);
reader.map(|e| e.expect("failed to read file"))
}
与 Read 一起使用
如示例所示
// use ...
use jsonit::JsonItError;
use log::info;
type TestResult = Result<(), JsonItError>;
fn test_string_with_type_at<T: DeserializeOwned + std::fmt::Debug>(data: &str, at: &str) -> TestResult {
setup_logging();
let reader = data.as_bytes();
let prefix = at.as_bytes();
let iterator = JsonSeqIterator::new(reader, prefix);
for res in iterator {
let item: T = res?;
println!("{:?}", item);
}
Ok(())
}
fn reader_number_option() -> TestResult {
let data = r#"{"a": [ [1,2,null]] }"#;
test_string_with_type_at::<Vec<Option<i32>>>(data, "a")
}
依赖项
~0.7–1.6MB
~35K SLoC