Struct serde_json::de::Deserializer [−][src]
A structure that deserializes JSON into Rust values.
Implementations
impl<'de, R> Deserializer<R> where
R: Read<'de>,
[src][−]
R: Read<'de>,
pub fn new(read: R) -> Self
[src][−]
Create a JSON 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
- Deserializer::from_slice
- Deserializer::from_reader
impl<R> Deserializer<IoRead<R>> where
R: Read,
[src][−]
R: Read,
pub fn from_reader(reader: R) -> Self
[src][−]
Creates a JSON deserializer from an io::Read
.
Reader-based deserializers do not support deserializing borrowed types
like &str
, since the std::io::Read
trait has no non-copying methods
– everything it does involves copying bytes out of the data source.
impl<'a> Deserializer<SliceRead<'a>>
[src][−]
impl<'a> Deserializer<StrRead<'a>>
[src][−]
impl<'de, R: Read<'de>> Deserializer<R>
[src][−]
pub fn end(&mut self) -> Result<()>
[src][−]
The Deserializer::end
method should be called after a value has been fully deserialized.
This allows the Deserializer
to validate that the input stream is at the end or that it
only has trailing whitespace.
pub fn into_iter<T>(self) -> StreamDeserializer<'de, R, T>ⓘNotable traits for StreamDeserializer<'de, R, T>
impl<'de, R, T> Iterator for StreamDeserializer<'de, R, T> where
R: Read<'de>,
T: Deserialize<'de>, type Item = Result<T>;
where
T: Deserialize<'de>,
[src][−]
Notable traits for StreamDeserializer<'de, R, T>
impl<'de, R, T> Iterator for StreamDeserializer<'de, R, T> where
R: Read<'de>,
T: Deserialize<'de>, type Item = Result<T>;
T: Deserialize<'de>,
Turn a JSON deserializer into an iterator over values of type T.
pub fn disable_recursion_limit(&mut self)
[src][−]
Parse arbitrarily deep JSON structures without any consideration for overflowing the stack.
You will want to provide some other way to protect against stack overflows, such as by wrapping your Deserializer in the dynamically growing stack adapter provided by the serde_stacker crate. Additionally you will need to be careful around other recursive operations on the parsed result which may overflow the stack after deserialization has completed, including, but not limited to, Display and Debug and Drop impls.
This method is only available if serde_json is built with the
"unbounded_depth"
feature.
Examples
use serde::Deserialize; use serde_json::Value; fn main() { let mut json = String::new(); for _ in 0..10000 { json = format!("[{}]", json); } let mut deserializer = serde_json::Deserializer::from_str(&json); deserializer.disable_recursion_limit(); let deserializer = serde_stacker::Deserializer::new(&mut deserializer); let value = Value::deserialize(deserializer).unwrap(); carefully_drop_nested_arrays(value); } fn carefully_drop_nested_arrays(value: Value) { let mut stack = vec![value]; while let Some(value) = stack.pop() { if let Value::Array(array) = value { stack.extend(array); } } }
Trait Implementations
impl<'de, 'a, R: Read<'de>> Deserializer<'de> for &'a mut Deserializer<R>
[src][+]
Auto Trait Implementations
impl<R> RefUnwindSafe for Deserializer<R> where
R: RefUnwindSafe,
R: RefUnwindSafe,
impl<R> Send for Deserializer<R> where
R: Send,
R: Send,
impl<R> Sync for Deserializer<R> where
R: Sync,
R: Sync,
impl<R> Unpin for Deserializer<R> where
R: Unpin,
R: Unpin,
impl<R> UnwindSafe for Deserializer<R> where
R: UnwindSafe,
R: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> From<T> for T
[src][+]
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,