tinyjson is a library to parse/generate JSON format document.
Goals of this library are
Vec
or HashMap
as its internal representationVec
,String
, HashMap
by yourself. It is good for readers of your source code to show where memory allocationswith_capacity
method).Rust stable toolchain.
Add this crate to dependencies
section of your Cargo.toml
[dependencies]
tinyjson = "2"
use tinyjson::JsonValue;
use std::collections::HashMap;
use std::convert::TryInto;
let s = r#"
{
"bool": true,
"arr": [1, null, "test"],
"nested": {
"blah": false,
"blahblah": 3.14
},
"unicode": "\u2764"
}
"#;
// Parse from strings
let parsed: JsonValue = s.parse().unwrap();
// Access to inner value represented with standard containers
let object: &HashMap<_, _> = parsed.get().unwrap();
println!("Parsed HashMap: {:?}", object);
// Generate JSON string
println!("{}", parsed.stringify().unwrap());
// Generate formatted JSON string with indent
println!("{}", parsed.format().unwrap());
// Access nested elements by .query() or .query_mut() without panic
let elem = parsed.query().child("arr").child(1).find();
println!("Second element of \"arr\": {:?}", elem);
// Convert to inner value represented with standard containers
let object: HashMap<_, _> = parsed.try_into().unwrap();
println!("Converted into HashMap: {:?}", object);
// Create JSON values from standard containers
let mut m = HashMap::new();
m.insert("foo".to_string(), true.into());
let mut v = JsonValue::from(m);
// Access with `Index` and `IndexMut` operators quickly (panic when no element)
println!("{:?}", v["foo"]);
v["foo"] = JsonValue::from("hello".to_string());
println!("{:?}", v["foo"]);
See the document to know all APIs.
https://github.com/rhysd/tinyjson