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

Download history 1550/week @ 2024-04-27 1424/week @ 2024-05-04 1648/week @ 2024-05-11 1481/week @ 2024-05-18 1378/week @ 2024-05-25 1254/week @ 2024-06-01 1256/week @ 2024-06-08 1434/week @ 2024-06-15 1445/week @ 2024-06-22 914/week @ 2024-06-29 1254/week @ 2024-07-06 1202/week @ 2024-07-13 1578/week @ 2024-07-20 1597/week @ 2024-07-27 3144/week @ 2024-08-03 1820/week @ 2024-08-10

每月下载量 8,298
9 个crate中使用(8 个直接使用)

MIT 许可证

61KB
391

Project Status: Active – The project has reached a stable, usable state and is being actively developed. CI Status codecov.io Minimum Supported Rust Version MIT License

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