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§

AsyncJsonLinesReaderasync
A structure for asynchronously reading JSON values from JSON Lines input.
AsyncJsonLinesWriterasync
A structure for asynchronously writing JSON values as JSON Lines.
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.
JsonLinesSinkasync
An asynchronous sink that serializes input values of type T as JSON and writes them to the underlying AsyncWrite value W.
JsonLinesStreamasync
An asynchronous stream over the lines of an AsyncBufRead value R that decodes each line as JSON of type T.
JsonLinesWriter
A structure for writing JSON values as JSON Lines.

Traits§

AsyncBufReadJsonLinesasync
An extension trait for the tokio::io::AsyncBufRead trait that adds a json_lines() method
AsyncWriteJsonLinesasync
An extension trait for the tokio::io::AsyncWrite trait that adds an into_json_lines_sink() method
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.