Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
JSON and serialization
What is JSON?
JSON (JavaScript Object Notation) is a way to write data in JavaScript. Like XML, it allows to encode structured data in a text format that can be easily read by humans. Its simple syntax and native compatibility with JavaScript have made it a widely used format.
Data types that can be encoded are JavaScript types (see the serde_json:Value
enum for more
details):
Boolean
: equivalent to rust'sbool
I64
: equivalent to rust'si64
U64
: equivalent to rust'su64
F64
: equivalent to rust'sf64
String
: equivalent to rust'sString
Array
: equivalent to rust'sVec<T>
, but also allowing objects of different types in the same arrayObject
: equivalent to rust'sBTreeMap<String, serde_json::Value>
; set thepreserve_order
feature to useLinkedHashMap<String, serde_json::Value>
insteadNull
An object is a series of string keys mapping to values, in "key": value
format. Arrays are
enclosed in square brackets ([ ... ]) and objects in curly brackets ({ ... }). A simple JSON
document encoding a person, his/her age, address and phone numbers could look like
{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"PhoneNumbers": [
"+44 1234567",
"+44 2345678"
]
}
If we assume that FirstName
is optional and all other fields are mandatory, the above JSON could
correspond to the following Rust structs:
#[derive(Serialize, Deserialize)]
struct Data {
#[serde(rename="FirstName")] // to comply with Rust coding standards
first_name: Option<String>,
LastName: String,
Age: u32,
Address: Address,
PhoneNumbers: Vec<String>
}
#[derive(Serialize, Deserialize)]
struct Address {
Street: String,
City: String,
Country: String
}
Type-based Serialization and Deserialization
Serde provides a mechanism for low boilerplate serialization & deserialization of values to and
from JSON via the serialization API. To be able to serialize a piece of data, it must implement
the serde::Serialize
trait. To be able to deserialize a piece of data, it must implement the
serde::Deserialize
trait. Serde provides provides an annotation to automatically generate
the code for these traits: #[derive(Serialize, Deserialize)]
.
The JSON API also provides an enum serde_json::Value
and a method to_value
to serialize
objects. A serde_json::Value
value can be serialized as a string or buffer using the
functions described above. You can also use the json::Serializer
object, which implements the
Serializer
trait.
Examples of use
Parsing a str
to Value
and reading the result
//#![feature(custom_derive, plugin)]
//#![plugin(serde_macros)]
extern crate serde_json;
use Value;