Struct StreamDeserializer

struct StreamDeserializer<'de, R, T> { ... }

Iterator that deserializes a stream into multiple JSON values.

A stream deserializer can be created from any JSON deserializer using the Deserializer::into_iter method.

The data can consist of any JSON value. Values need to be a self-delineating value e.g. arrays, objects, or strings, or be followed by whitespace or a self-delineating value.

use serde_json::{Deserializer, Value};

fn main() {
    let data = "{\"k\": 3}1\"cool\"\"stuff\" 3{}  [0, 1, 2]";

    let stream = Deserializer::from_str(data).into_iter::<Value>();

    for value in stream {
        println!("{}", value.unwrap());
    }
}

Implementations

impl<'de, R, T> StreamDeserializer<'de, R, T>

fn new(read: R) -> Self

Create a JSON stream deserializer from one of the possible serde_json input sources.

Typically it is more convenient to use one of these methods instead:

  • Deserializer::from_str(...).into_iter()
  • Deserializer::from_slice(...).into_iter()
  • Deserializer::from_reader(...).into_iter()
fn byte_offset(self: &Self) -> usize

Returns the number of bytes so far deserialized into a successful T.

If a stream deserializer returns an EOF error, new data can be joined to old_data[stream.byte_offset()..] to try again.

let data = b"[0] [1] [";

let de = serde_json::Deserializer::from_slice(data);
let mut stream = de.into_iter::<Vec<i32>>();
assert_eq!(0, stream.byte_offset());

println!("{:?}", stream.next()); // [0]
assert_eq!(3, stream.byte_offset());

println!("{:?}", stream.next()); // [1]
assert_eq!(7, stream.byte_offset());

println!("{:?}", stream.next()); // error
assert_eq!(8, stream.byte_offset());

// If err.is_eof(), can join the remaining data to new data and continue.
let remaining = &data[stream.byte_offset()..];

Note: In the future this method may be changed to return the number of bytes so far deserialized into a successful T or syntactically valid JSON skipped over due to a type error. See serde-rs/json#70 for an example illustrating this.

impl<'de, R, T> Freeze for StreamDeserializer<'de, R, T>

impl<'de, R, T> FusedIterator for StreamDeserializer<'de, R, T>

impl<'de, R, T> Iterator for StreamDeserializer<'de, R, T>

fn next(self: &mut Self) -> Option<Result<T>>

impl<'de, R, T> RefUnwindSafe for StreamDeserializer<'de, R, T>

impl<'de, R, T> Send for StreamDeserializer<'de, R, T>

impl<'de, R, T> Sync for StreamDeserializer<'de, R, T>

impl<'de, R, T> Unpin for StreamDeserializer<'de, R, T>

impl<'de, R, T> UnwindSafe for StreamDeserializer<'de, R, T>

impl<I> IntoIterator for StreamDeserializer<'de, R, T>

fn into_iter(self: Self) -> I

impl<T> Any for StreamDeserializer<'de, R, T>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for StreamDeserializer<'de, R, T>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for StreamDeserializer<'de, R, T>

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> From for StreamDeserializer<'de, R, T>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T, U> Into for StreamDeserializer<'de, R, T>

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for StreamDeserializer<'de, R, T>

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for StreamDeserializer<'de, R, T>

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>