[−][src]Struct serde_json::de::Deserializer
A structure that deserializes JSON into Rust values.
Methods
impl<'de, R> Deserializer<R> where
R: Read<'de>,
[src]
impl<'de, R> Deserializer<R> where
R: Read<'de>,
pub fn new(read: R) -> Self
[src]
pub fn new(read: R) -> Self
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_bytes
- Deserializer::from_reader
impl<R> Deserializer<IoRead<R>> where
R: Read,
[src]
impl<R> Deserializer<IoRead<R>> where
R: Read,
pub fn from_reader(reader: R) -> Self
[src]
pub fn from_reader(reader: R) -> Self
Creates a JSON deserializer from an io::Read
.
impl<'a> Deserializer<SliceRead<'a>>
[src]
impl<'a> Deserializer<SliceRead<'a>>
pub fn from_slice(bytes: &'a [u8]) -> Self
[src]
pub fn from_slice(bytes: &'a [u8]) -> Self
Creates a JSON deserializer from a &[u8]
.
impl<'a> Deserializer<StrRead<'a>>
[src]
impl<'a> Deserializer<StrRead<'a>>
impl<'de, R: Read<'de>> Deserializer<R>
[src]
impl<'de, R: Read<'de>> Deserializer<R>
pub fn end(&mut self) -> Result<()>
[src]
pub fn end(&mut self) -> Result<()>
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.
ⓘImportant traits for StreamDeserializer<'de, R, T>pub fn into_iter<T>(self) -> StreamDeserializer<'de, R, T> where
T: Deserialize<'de>,
[src]
pub fn into_iter<T>(self) -> StreamDeserializer<'de, R, T> where
T: Deserialize<'de>,
Turn a JSON deserializer into an iterator over values of type T.
Trait Implementations
impl<'de, 'a, R: Read<'de>> Deserializer<'de> for &'a mut Deserializer<R>
[src]
impl<'de, 'a, R: Read<'de>> Deserializer<'de> for &'a mut Deserializer<R>
type Error = Error
The error type that can be returned if some error occurs during deserialization. Read more
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_str<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_str<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_string<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_string<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
Parses a JSON string as bytes. Note that this function does not check whether the bytes represent a valid UTF-8 string.
The relevant part of the JSON specification is Section 8.2 of RFC 7159:
When all the strings represented in a JSON text are composed entirely of Unicode characters (however escaped), then that JSON text is interoperable in the sense that all software implementations that parse it will agree on the contents of names and of string values in objects and arrays.
However, the ABNF in this specification allows member names and string values to contain bit sequences that cannot encode Unicode characters; for example, "\uDEAD" (a single unpaired UTF-16 surrogate). Instances of this have been observed, for example, when a library truncates a UTF-16 string without checking whether the truncation split a surrogate pair. The behavior of software that receives JSON texts containing such values is unpredictable; for example, implementations might return different values for the length of a string value or even suffer fatal runtime exceptions.
The behavior of serde_json is specified to fail on non-UTF-8 strings when deserializing into Rust UTF-8 string types such as String, and succeed with non-UTF-8 bytes when deserializing using this method.
Escape sequences are processed as usual, and for \uXXXX
escapes it is
still checked if the hex number represents a valid Unicode code point.
Examples
You can use this to parse JSON strings containing invalid UTF-8 bytes.
use serde_bytes::ByteBuf;
fn look_at_bytes() -> Result<(), serde_json::Error> {
let json_data = b"\"some bytes: \xe5\x00\xe5\"";
let bytes: ByteBuf = serde_json::from_slice(json_data)?;
assert_eq!(b'\xe5', bytes[12]);
assert_eq!(b'\0', bytes[13]);
assert_eq!(b'\xe5', bytes[14]);
Ok(())
}
#
# fn main() {
# look_at_bytes().unwrap();
# }
Backslash escape sequences like \n
are still interpreted and required
to be valid, and \u
escape sequences are required to represent valid
Unicode code points.
use serde_bytes::ByteBuf;
fn look_at_bytes() {
let json_data = b"\"invalid unicode surrogate: \\uD801\"";
let parsed: Result<ByteBuf, _> = serde_json::from_slice(json_data);
assert!(parsed.is_err());
let expected_msg = "unexpected end of hex escape at line 1 column 35";
assert_eq!(expected_msg, parsed.unwrap_err().to_string());
}
#
# fn main() {
# look_at_bytes();
# }
fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_option<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_option<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
Parses a null
as a None, and any other values as a Some(...)
.
fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_unit_struct<V>(
self,
_name: &'static str,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_unit_struct<V>(
self,
_name: &'static str,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_newtype_struct<V>(
self,
name: &str,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_newtype_struct<V>(
self,
name: &str,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
Parses a newtype struct as the underlying value.
fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_tuple_struct<V>(
self,
_name: &'static str,
_len: usize,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_tuple_struct<V>(
self,
_name: &'static str,
_len: usize,
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_struct<V>(
self,
_name: &'static str,
_fields: &'static [&'static str],
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_struct<V>(
self,
_name: &'static str,
_fields: &'static [&'static str],
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_enum<V>(
self,
_name: &str,
_variants: &'static [&'static str],
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_enum<V>(
self,
_name: &str,
_variants: &'static [&'static str],
visitor: V
) -> Result<V::Value> where
V: Visitor<'de>,
Parses an enum as an object like {"$KEY":$VALUE}
, where $VALUE is either a straight
value, a [..]
, or a {..}
.
fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
[src]
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value> where
V: Visitor<'de>,
fn is_human_readable(&self) -> bool
[src]
fn is_human_readable(&self) -> bool
Determine whether Deserialize
implementations should expect to deserialize their human-readable form. Read more
Auto Trait Implementations
impl<R> Send for Deserializer<R> where
R: Send,
impl<R> Send for Deserializer<R> where
R: Send,
impl<R> Sync for Deserializer<R> where
R: Sync,
impl<R> Sync for Deserializer<R> where
R: Sync,
Blanket Implementations
impl<T, U> Into for T where
U: From<T>,
[src]
impl<T, U> Into for T where
U: From<T>,
impl<T> From for T
[src]
impl<T> From for T
impl<T, U> TryFrom for T where
T: From<U>,
[src]
impl<T, U> TryFrom for T where
T: From<U>,
type Error = !
try_from
)The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T> Borrow for T where
T: ?Sized,
[src]
impl<T> Borrow for T where
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
impl<T> Any for T where
T: 'static + ?Sized,
fn get_type_id(&self) -> TypeId
[src]
fn get_type_id(&self) -> TypeId
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
try_from
)The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
impl<T> BorrowMut for T where
T: ?Sized,
[src]
impl<T> BorrowMut for T where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
fn borrow_mut(&mut self) -> &mut T