Crate serde_jsonlines

Source
Expand description

JSON Lines (a.k.a. newline-delimited JSON) is a simple format for storing sequences of JSON values in which each value is serialized on a single line and terminated by a newline sequence. The serde-jsonlines crate provides functionality for reading & writing these documents (whether all at once or line by line) using serde’s serialization & deserialization features.

Basic usage involves simply importing the BufReadExt or WriteExt extension trait and then using the json_lines() or write_json_lines() method on a BufRead or Write value to read or write a sequence of JSON Lines values. Convenience functions are also provided for the common case of reading or writing a JSON Lines file given as a filepath.

At a lower level, values can be read or written one at a time (which is useful if, say, different lines are different types) by wrapping a BufRead or Write value in a JsonLinesReader or JsonLinesWriter and then calling the wrapped structure’s read() or write() method, respectively.

When the async feature is enabled, analogous types for working with JSON Lines asynchronously under [tokio] become available.

§Example

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(())
}

Structs§

JsonLinesIter
An iterator over the lines of a BufRead value R that decodes each line as JSON of type T.
JsonLinesReader
A structure for reading JSON values from JSON Lines input.
JsonLinesWriter
A structure for writing JSON values as JSON Lines.

Traits§

BufReadExt
An extension trait for the std::io::BufRead trait that adds a json_lines() method
WriteExt
An extension trait for the std::io::Write trait that adds a write_json_lines() method

Functions§

append_json_lines
Append an iterator of values to the file at path as JSON Lines.
json_lines
Iterate over JSON Lines values from a file.
write_json_lines
Write an iterator of values to the file at path as JSON Lines.

Type Aliases§

JsonLinesFileIter
A type alias for a JsonLinesIter on a buffered file object.