Expand description
JSON (RFC 7159) decoder implementation.
The decoder supports direct decoding into Rust types (providing
helper macros such as object!) as well as generic decoding
using an intermediate representation.
§Example 1: Generic decoding
use json::{Decoder, Json};
use json::ast::Ref;
let json = r#"
{ "field1": true,
"field2": { "nested": [42, 73] }
}"#;
let mut d = Decoder::default(json.chars());
let v = d.decode().unwrap();
let r = Ref::new(&v);
assert_eq!(true, r.get("field1").bool().unwrap());
assert_eq!(73f64, r.get("field2").get("nested").at(1).number().unwrap());
§Example 2: Direct decoding using macros
#[macro_use] extern crate json;
use json::Decoder;
const JSON: &'static str =
r#"
{
"Width": 800,
"Height": 600,
"Title": "View from 15th Floor",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": 100
},
"Animated" : false,
"IDs": [116, 943, 234, 38793]
}
"#;
struct Image {
width: usize,
height: usize,
title: String,
thumbnail: Thumbnail,
animated: bool,
ids: Vec<u32>,
geo: Option<(f64, f64)>
}
struct Thumbnail {
url: String,
height: u16,
width: u16
}
let mut d = Decoder::default(JSON.chars());
let image = object! {
let decoder = d;
Image {
width: req. "Width" => d.usize(),
height: req. "Height" => d.usize(),
title: req. "Title" => d.string(),
thumbnail: req. "Thumbnail" => object! {
let decoder = d;
Thumbnail {
url: req. "Url" => d.string(),
height: req. "Height" => d.u16(),
width: req. "Width" => d.u16()
}
},
animated: req. "Animated" => d.bool(),
ids: req. "IDs" => array!(d, d.u32()),
geo: opt. "Geo" => d.optional(|d| {
let lat = d.f64()?;
let lon = d.f64()?;
Ok((lat, lon))
})
}
};
assert!(image.is_ok());Structs§
- Array
Iter - Iterator over JSON array elements.
- Config
- Decoder configuration.
- Decoder
- JSON decoder over
chariterators. - Read
Iter - Iterator over characters read from any
Read-type.