6 个版本 (破坏性更新)
0.6.0 | 2024年7月25日 |
---|---|
0.5.0 | 2023年11月22日 |
0.4.0 | 2022年10月31日 |
0.3.0 | 2022年10月30日 |
0.1.0 | 2022年10月28日 |
在 编码 中排名 225
每月下载量 8,298
在 9 个crate中使用(8 个直接使用)
61KB
391 行
GitHub | crates.io | 文档 | 问题 | 变更日志
JSON Lines(又称换行分隔的 JSON)是一种简单的格式,用于存储由单行序列化的 JSON 值,每个值占一行,并以换行序列结束。`serde-jsonlines` crate 提供了使用 `serde` 的序列化和反序列化功能来读取和写入这些文档(一次性或逐行)的功能。
基本用法涉及简单地导入 `BufReadExt` 或 `WriteExt` 扩展特质,然后在 `BufRead` 或 `Write` 值上使用 `json_lines()` 或 `write_json_lines()` 方法来读取或写入一系列 JSON Lines 值。还提供了方便的函数来处理读取或写入给定文件路径的 JSON Lines 文件这种常见情况。
在较低级别,可以通过将 `BufRead` 或 `Write` 值包装在 `JsonLinesReader` 或 `JsonLinesWriter` 中来逐个读取或写入值(如果不同行具有不同类型,则很有用),然后分别调用包装结构的 `read()` 或 `write()` 方法。
当启用 `async` 功能时,将提供用于在 `tokio` 下异步处理 JSON Lines 的类似类型。
示例
use serde::{Deserialize, Serialize};
use serde_jsonlines::{json_lines, write_json_lines};
use std::io::Result;
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Structure {
pub name: String,
pub size: i32,
pub on: bool,
}
fn main() -> Result<()> {
let values = vec![
Structure {
name: "Foo Bar".into(),
size: 42,
on: true,
},
Structure {
name: "Quux".into(),
size: 23,
on: false,
},
Structure {
name: "Gnusto Cleesh".into(),
size: 17,
on: true,
},
];
write_json_lines("example.jsonl", &values)?;
let values2 = json_lines("example.jsonl")?.collect::<Result<Vec<Structure>>>()?;
assert_eq!(values, values2);
Ok(())
}
依赖项
~0.5–2.1MB
~40K SLoC