Releases: serde-rs/json
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.0
First of all, go read the Serde 1.0.0 release notes!
Zero-copy deserialization
This release supports Serde 1.0's zero-copy deserialization feature. This allows borrowed data to be deserialized efficiently and safely.
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
#[derive(Deserialize, Debug)]
struct User<'a> {
fingerprint: &'a str,
location: &'a str,
}
fn main() {
let j = "{
\"fingerprint\": \"0xF9BA143B95FF6D82\",
\"location\": \"Menlo Park, CA\"
}";
let u: User = serde_json::from_str(j).unwrap();
println!("{:#?}", u);
}
Breaking changes
-
The
StreamDeserializer
now only supports arrays and objects.Previously it supported any JSON value, leading to confusing behavior like
truetrue
being deserialized successfully as two boolean values. -
The
ToJson
trait has been removed.Please use
serde_json::to_value
instead. See #294 for some justification. -
Support for deserializing from Iterator<Item = io::Result<u8>> removed.
Please use
serde_json::from_reader
instead. -
The
Formatter
trait methods now returnio::Result
.Previously they returned
serde_json::Result
. There should be no reason for a formatter to fail other than IO. -
The
Formatter::write_string_fragment
method now receives&str
.Previously the method received
&[u8]
but it was always valid UTF-8. -
Conversion
From<io::Error> for serde_json::Error
removed.The
serde_json::Error
type is intended to be constructed by serde_json, not by your code. -
The writer argument is passed by value to
serde_json::to_writer
.The standard library provides
impl<'a, W: Write + ?Sized> Write for &'a mut W
so passing a&mut W
will continue to work.
v0.9.10
v0.9.9
v0.9.8
-
Implement serde::Deserializer for &serde_json::Value (#261)
This can be convenient for deserializing from indexed content:
let v = json!({ "m": { "serde": 1, "json": 100 } }); let m: BTreeMap<String, u8> = Deserialize::deserialize(&v["m"])?;
-
Add an entry API to the serde_json::Map type, just like what BTreeMap has (#236)
let mut map = serde_json::Map::new(); map.entry("serde").or_insert(json!(12)); match map.entry("serde") { Entry::Vacant(vacant) => { // can insert } Entry::Occupied(occupied) => { // can read, mutate, remove } } assert_eq!(map["serde"], 12);
-
Quit using voldemort types to parameterize the deserializer; this should make storing serde_json::Deserializer and StreamDeserializer in structs more convenient (#260)
v0.9.7
-
Expose
serde_json::de::Read
to simplify certainwhere
clauses (#250)pub struct Client<R> { reader: StreamDeserializer<R, serde_json::Value>, } fn f<R>(c: Client<R>) where R: serde_json::de::Read { /* ... */ }
-
Some convenient new
From
impls (#253, thanks @killercup)- From for Value
- From for Value
- From<&str> for Value
- From<Cow> for Value
- From<Map<String, Value>> for Value
- From<Vec> for Value where T: Into
- From<&[T]> for Value where T: Clone + Into
- FromIterator for Value where T: Into
-
Support deserializing strings as raw bytes (#257, thanks @bennofs)