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
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}