Skip to content

v0.9.0

Compare
Choose a tag to compare
@dtolnay dtolnay released this 25 Jan 21:14
· 1369 commits to master since this release
v0.9.0
ce49f79

This release features a redesigned serde_json::Value enum that better represents the loosely-typed reality of common JSON workflows in Rust. Don't despair - strongly typed Serde serialization and deserialization is still supported of course.

enum Value {
    Null,
    Bool(bool),
    Number(Number),
    String(String),
    Array(Vec<Value>),
    Object(Map<String, Value>),
}

See the documentation for example code, including some examples of indexing into a serde_json::Value in a concise way: jv["address"]["city"].

This release adds a json! macro for building serde_json::Value objects in your program from a very natural JSON syntax.

// The type of `value` is serde_json::Value
let value = json!({
    "code": 200,
    "success": true,
    "payload": {
        "features": [
            "serde",
            "json"
        ]
    }
});

Any expression can be included in the serde_json::Value that you build. This works as long as the type of the expression implements Serde's Serialize trait.

let code = 200;
let features = vec!["serde", "json"];

let value = json!({
   "code": code,
   "success": code == 200,
   "payload": {
       features[0]: features[1]
   }
});

Please read also the Serde 0.9.0 release notes.