1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use serde_json::json;
use serde_json::Value;

//深度取值。例如a.b.c 最终得到c.如果不存在返回Value::Null
pub fn get_deep_value(arg: &str, value: &Value) -> Value {
    let splits: Vec<&str> = arg.split(".").collect();

    let mut v = value;
    for item in splits {
        if item.is_empty() {
            continue;
        }
        v = v.get(item).unwrap_or(&Value::Null);
    }
    return v.clone();
}

#[test]
pub fn test_get_deep_value() {
    let john = json!({
        "a": {
           "name":"job",
        },
    });

    let v = get_deep_value("a.name", &john);
    println!("{}", v);
}