[][src]Trait json_value_search::Search

pub trait Search {
    fn search(self, path: &str) -> Result<Option<Value>>;
fn search_by_fields(&self, fields: Vec<&str>) -> Result<Option<Value>>; }

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.

Loading content...

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) => ()
};
Loading content...

Implementors

Loading content...