Crates.io | jsonit |
lib.rs | jsonit |
version | 0.2.10 |
source | src |
created_at | 2023-11-04 22:16:02.012728 |
updated_at | 2024-05-06 16:10:17.150719 |
description | A way to parse Json Items using iterators from streams |
homepage | |
repository | https://github.com/Plawn/jsonit |
max_upload_size | |
id | 1025598 |
size | 26,885 |
This crate was created in order to make the streaming of Json Objects inside array in a ([std::Read] or [std::Iterator
Like the ijson package you have to specify a prefix in order for the library to find the array you want to parse.
In order to parse an [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,
as per the example:
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"))
}
as per the example:
// 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")
}