Trait json_value_search::Search [−][src]
pub trait Search {
fn search(self, path: &str) -> Result<Option<Value>>;
fn search_by_fields(&self, fields: Vec<&str>) -> Result<Option<Value>>;
}
Expand description
Trait used to search elements into Json Value
Required methods
Implementations on Foreign Types
Examples: Find elements in an object.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let value_expected_with_wildcard: Value = serde_json::from_str(r#"[{"field.B":"value_B"},{"field_C":"value_C"}]"#).unwrap();
assert_eq!(Some(value_expected_with_wildcard),value.clone().search(r#"/field_A/*"#).unwrap());
let value_expected_for_specific_field: Value = serde_json::from_str(r#"["value_B"]"#).unwrap();
assert_eq!(Some(value_expected_for_specific_field),value.clone().search(r#"/field_A/*/field.B"#).unwrap());
let value_expected_for_specific_index: Value = serde_json::from_str(r#"{"field.B":"value_B"}"#).unwrap();
assert_eq!(Some(value_expected_for_specific_index),value.clone().search(r#"/field_A/0"#).unwrap());
let value_expected_with_regex: Value = serde_json::from_str(r#"["value_B","value_C"]"#).unwrap();
assert_eq!(Some(value_expected_with_regex),value.clone().search(r#"/field_A/*/field.+"#).unwrap());
Examples: Find the same elements in an object or array return the same value.
use json_value_search::Search;
use serde_json::Value;
let value1: Value = serde_json::from_str(r#"[{"array1":[{"field1":"value1"},{"field2":"value2"}]}]"#).unwrap();
let value2: Value = serde_json::from_str(r#"{"array2":[{"field1":"value1"},{"field2":"value2"}]}"#).unwrap();
let result1 = value1.search(r#"/*/array*/*"#).unwrap();
let result2 = value2.search(r#"/array*/*"#).unwrap();
assert_eq!(result1, result2);
Examples: Not found an element return None.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let result = value.clone().search(r#"/not_found/*"#);
match result {
Ok(None) => (),
Ok(Some(_)) => panic!("Should return None"),
Err(e) => panic!(format!("Should not be in error, {}", e))
};
Examples: Write a bad regex return an error.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let result = value.clone().search(r#"/["#);
match result {
Ok(_) => panic!("Should return an error"),
Err(e) => ()
};
Examples: Find elements in an object.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let value_expected_with_wildcard: Value = serde_json::from_str(r#"[{"field.B":"value_B"},{"field_C":"value_C"}]"#).unwrap();
assert_eq!(Some(value_expected_with_wildcard),value.clone().search_by_fields(vec!["field_A","*"]).unwrap());
let value_expected_for_specific_field: Value = serde_json::from_str(r#"["value_B"]"#).unwrap();
assert_eq!(Some(value_expected_for_specific_field),value.clone().search_by_fields(vec!["field_A","*","field.B"]).unwrap());
let value_expected_for_specific_index: Value = serde_json::from_str(r#"{"field.B":"value_B"}"#).unwrap();
assert_eq!(Some(value_expected_for_specific_index),value.clone().search_by_fields(vec!["field_A","0"]).unwrap());
let value_expected_with_regex: Value = serde_json::from_str(r#"["value_B","value_C"]"#).unwrap();
assert_eq!(Some(value_expected_with_regex),value.clone().search_by_fields(vec!["field_A","*","field.+"]).unwrap());
Examples: Find the same elements in an object or array return the same value.
use json_value_search::Search;
use serde_json::Value;
let value1: Value = serde_json::from_str(r#"[{"array1":[{"field1":"value1"},{"field2":"value2"}]}]"#).unwrap();
let value2: Value = serde_json::from_str(r#"{"array2":[{"field1":"value1"},{"field2":"value2"}]}"#).unwrap();
let result1 = value1.search_by_fields(vec!["*","array*","*"]).unwrap();
let result2 = value2.search_by_fields(vec!["array*","*"]).unwrap();
assert_eq!(result1, result2);
Examples: Not found an element return None.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let result = value.clone().search_by_fields(vec!["not_found"]);
match result {
Ok(None) => (),
Ok(Some(_)) => panic!("Should return None"),
Err(e) => panic!(format!("Should not be in error, {}", e))
};
Examples: Write a bad regex return an error.
use json_value_search::Search;
use serde_json::Value;
let value: Value = serde_json::from_str(r#"{"field_A":[{"field.B":"value_B"},{"field_C":"value_C"}]}"#).unwrap();
let result = value.clone().search_by_fields(vec!["["]);
match result {
Ok(_) => panic!("Should return an error"),
Err(e) => ()
};