| Crates.io | json_extract |
| lib.rs | json_extract |
| version | 0.1.4 |
| created_at | 2022-03-23 22:59:11.867181+00 |
| updated_at | 2022-03-24 19:01:00.354459+00 |
| description | This macro reduces boilerplate when using serde_json::Value variants when trying to get into a nested property. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 555446 |
| size | 9,006 |
This macro reduces boilerplate when using serde_json::Value variants when trying to get into a nested property.
let json_parsed = serde_json::json!({
"brand": {
"tesla": {
"model": {
"designers": "Mr Bean"
}
}
}
});
let designer: Option<String> = json_extract!("brand.tesla.model.designer", &json_parsed, String);
println!("Who tf is this designer? {}",designer.unwrap_or_default());
or...
if let serde_json::Value::Object(brand) = &json_parsed {
let brand = brand.get("brand").unwrap();
if let serde_json::Value::Object(tesla) = &brand {
let tesla = tesla.get("tesla").unwrap();
if let serde_json::Value::Object(model) = &tesla {
let model = model.get("model").unwrap();
if let serde_json::Value::Object(designers) = &model {
let res = designer.get("designer");
let designer = serde_json::from_value::<String>(res.unwrap().to_owned()).unwrap();
}
}
}
}
println!("Who tf is this designer? {}",designer.unwrap_or_default());
The macro accepts 3 arguments:
json_serde::Value has the following variants:
The third parameter to pass in the macro is a Rust type, so, things we can pass if we want to get data from some variants:
| Value variant | Rust types |
|---|---|
| Array | Vec<String>, Vec<bool>, Vec<f64>, Vec<Value> ... |
| Bool | bool |
| Number | u32, i32, i64, f32, usize ... |
| Object | Value |
| String | String |
| Null | not supported |