1 个不稳定版本
0.1.4 | 2022年3月24日 |
---|---|
0.1.3 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#1437 in 编码
9KB
57 行
json-extract-macro
用1行代码访问嵌套JSON值
此宏在尝试获取嵌套属性时使用 serde_json::Value
变体以减少样板代码。
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());
或...
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());
宏参数
该宏接受3个参数
- 包含路径的 &str,路径由 "." 分隔
- 要读取的 serde_json::Value 变量。
- 我们想要获取的属性的类型。
支持的类型
json_serde::Value 有以下变体
- 数组
- 布尔值
- 空值
- 数字
- 对象
- 字符串
宏的第三个参数是 Rust 类型,因此,如果我们想从某些变体获取数据,可以传递以下内容
值变体 | Rust 类型 |
---|---|
数组 | Vec<字符串>, Vec<bool>, Vec<f64>, Vec<Value> ... |
布尔值 | bool |
数字 | u32, i32, i64, f32, usize ... |
对象 | Value |
字符串 | 字符串 |
空值 | 不支持 |
依赖项
~0.7–1.6MB
~35K SLoC