[−][src]Trait json_value_search::Search
Trait used to search elements into Json Value
Required methods
fn search(self, path: &str) -> Result<Option<Value>>
Search elements by path
fn search_by_fields(&self, fields: Vec<&str>) -> Result<Option<Value>>
Search elements by a list of fields.
Implementations on Foreign Types
impl Search for Value
[src]
fn search(self, path: &str) -> Result<Option<Value>>
[src]
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) => () };
fn search_by_fields(&self, fields: Vec<&str>) -> Result<Option<Value>>
[src]
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) => () };