filter

Function filter 

Source
pub fn filter<F>(json: Value, filter: &F) -> Result<F::Output, Error>
where F: Filter,
Expand description

Runs a filter function on a JSON value

ยงExample

use serde_filter::prelude::*;
 let json = serde_json::json!({
     "explanation": "test",
     "date": "2020-01-01",
     "title": "test",
      "url": "test",
 });
 let values = filter::<Match<String>>(json, &Match::new("explanation")).unwrap();
 assert_eq!(values, vec!["test".to_string()]);
Examples found in repository?
example/flattener.rs (line 24)
6fn main() {
7    let json = serde_json::json!({
8    "a": {
9        "b": {
10        "c": {
11                "d": "value"
12            }
13        }
14    },
15    "e": "value"
16    });
17
18    let expected = serde_json::json!({
19      "a.b.c.d": "value",
20        "e": "value"
21    });
22
23    let flattener = Flatten::default(); // default is '.'
24    let result = filter::<Flatten>(json, &flattener).unwrap();
25    println!("{:?}", result);
26    assert_eq!(result, expected);
27}
More examples
Hide additional examples
example/match.rs (line 19)
6fn main() {
7    let json = json!({
8        "Object": {
9            "explanation": "test explanation",
10            "activeRegionNum": 23
11        },
12        "2022-01-11": {
13            "Object2": {
14                "explanation": "none",
15                "activeRegionNum": 98
16            }
17        }
18    });
19    let nums = filter::<Match<u64>>(json, &Match::new("activeRegionNum")).unwrap();
20    assert_eq!(vec![23 as u64, 98 as u64], nums);
21    dbg!(nums);
22}
example/ignore.rs (line 17)
6fn main() {
7    let json = json!(
8        {
9            "explanation": "test",
10            "media_type": "test",
11            "hdurl": "test",
12            "service_version": "test",
13            "code": 200,
14            "msg": "test"
15        }
16    );
17    let values = filter::<Ignore>(json, &Ignore::new(vec!["explanation", "media_type"]));
18    if let Ok(trimmed) = values {
19        println!("TRIMMED: {:#?}", trimmed);
20        assert!(trimmed.get("explanation").is_none());
21        assert!(trimmed.get("media_type").is_none());
22        assert!(trimmed.get("hdurl").is_some());
23    } else {
24        panic!();
25    }
26
27    let json = json!({
28        "2020-01-01": {
29            "explanation": "test_1",
30            "media_type": "test",
31            "hdurl": "test",
32            "service_version": "test",
33            "code": 200,
34            "msg": "test"
35        },
36        "Object": {
37            "2023-01-11": {
38                "Object": {
39                    "explanation": "test_3",
40                    "media_type": "test",
41                    "hdurl": "test",
42                    "service_version": "test",
43                    "code": 200,
44                    "msg": "test"
45                },
46                "explanation": "test_2",
47            }
48        },
49        "explanation": "test_0"
50    });
51
52    let ignore = Ignore::new(vec!["explanation"]);
53    let trimmed = filter::<Ignore>(json, &ignore).unwrap();
54    println!("TRIMMED: {:#?}", trimmed);
55    assert!(trimmed["2020-01-01"].get("explanation").is_none(), "test_1");
56    assert!(
57        trimmed["Object"]["2023-01-11"]["Object"]
58            .get("explanation")
59            .is_none(),
60        "test_3"
61    );
62    assert!(
63        trimmed["Object"]["2023-01-11"].get("explanation").is_none(),
64        "test_2"
65    );
66    assert!(trimmed.get("explanation").is_none(), "test_0");
67}