Module json::decoder [] [src]

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

ArrayIter

Iterator over JSON array elements.

Config

Decoder configuration.

Decoder

JSON decoder over char iterators.

ReadIter

Iterator over characters read from any Read-type.

Enums

DecodeError
ReadError

Traits

FromJson

Type Definitions

DecodeResult