Skip to main content

parse

Function parse 

Source
pub fn parse(input: &str) -> Result<Json, String>
Expand description

Parse JSON text.

ยงErrors

Returns a description if the input is not valid JSON, exceeds 16 MiB, or contains more than 256 nested arrays and objects.

Examples found in repository?
examples/parse_and_build.rs (line 17)
14fn main() {
15    let request = r#"{"jsonrpc":"2.0","id":7,"method":"initialize","params":{"trace":"off"}}"#;
16
17    let value = parse(request).expect("the request is valid JSON");
18
19    // `get` walks objects; it returns `None` for a missing key and for
20    // a value that is not an object, so chains do not need a type check
21    // at every step.
22    assert_eq!(
23        value.get("method").and_then(Json::as_str),
24        Some("initialize")
25    );
26    assert_eq!(
27        value
28            .get("params")
29            .and_then(|p| p.get("trace"))
30            .and_then(Json::as_str),
31        Some("off")
32    );
33
34    // Building a reply. Object keys come back out in sorted order,
35    // which makes serialised output comparable in a test without
36    // parsing it again.
37    let reply = Json::object(vec![
38        ("jsonrpc", Json::str("2.0")),
39        ("id", value.get("id").cloned().unwrap_or(Json::Null)),
40        (
41            "result",
42            Json::object(vec![("capabilities", Json::object(vec![]))]),
43        ),
44    ]);
45
46    println!("{}", reply.to_json());
47
48    // Malformed input is an error with a message, not a panic and not
49    // a silent default.
50    let bad = parse("{\"unterminated\": ");
51    println!("malformed input: {}", bad.unwrap_err());
52}