Trait json_value_merge::Merge [−][src]
pub trait Merge {
fn merge(&mut self, new_json_value: Value);
fn merge_in(
&mut self,
json_pointer: &str,
new_json_value: Value
) -> Result<()>;
}
Expand description
Trait used to merge Json Values
Required methods
Method use to merge two Json Values : ValueA <- ValueB.
Implementations on Foreign Types
Examples: Merge two array together.
use serde_json::Value;
use json_value_merge::Merge;
let mut array1: Value = serde_json::from_str(r#"["a","b"]"#).unwrap();
let array2: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
array1.merge(array2);
assert_eq!(r#"["a","b","b","c"]"#, array1.to_string());
Examples: Merge two objects together.
use serde_json::Value;
use json_value_merge::Merge;
let mut object1: Value = serde_json::from_str(r#"{"value1":"a","value2":"b"}"#).unwrap();
let object2: Value = serde_json::from_str(r#"{"value1":"a","value2":"c","value3":"d"}"#).unwrap();
object1.merge(object2);
assert_eq!(r#"{"value1":"a","value2":"c","value3":"d"}"#,object1.to_string());
Examples: Merge an object into an array.
use serde_json::Value;
use json_value_merge::Merge;
let mut array: Value = serde_json::from_str(r#"[]"#).unwrap();
let object: Value = serde_json::from_str(r#"{"field1":"value1"}"#).unwrap();
array.merge(object);
assert_eq!(r#"[{"field1":"value1"}]"#,array.to_string());
Examples: Merge an array into an object.
use serde_json::Value;
use json_value_merge::Merge;
let mut object: Value = serde_json::from_str(r#"{"field1":"value1"}"#).unwrap();
let array: Value = serde_json::from_str(r#"["value2","value3"]"#).unwrap();
object.merge(array);
assert_eq!(r#"["value2","value3"]"#,object.to_string());
Examples: Merge an array in an object in a specific position.
use serde_json::Value;
use json_value_merge::Merge;
let mut object: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
let array: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
object.merge_in("/my_array", array.clone());
assert_eq!(r#"{"my_array":[{"a":"t"},"b","c"]}"#, object.to_string());
Examples: Merge two objects together in a specific position.
use serde_json::Value;
use json_value_merge::Merge;
let mut object1: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
let object2: Value = serde_json::from_str(r#"{"b":"c"}"#).unwrap();
object1.merge_in("/my_array/0/a", object2.clone());
assert_eq!(r#"{"my_array":[{"a":{"b":"c"}}]}"#, object1.to_string());
Examples: Merge an object in an array in a specific position. If the position not exist, the object is added in the array.
use serde_json::Value;
use json_value_merge::Merge;
let mut json_value: Value = serde_json::from_str(r#"[{"array1":[{"field":"value1"}]}]"#).unwrap();
let result = json_value.merge_in("/1", Value::String("value".to_string()));
assert_eq!(r#"[{"array1":[{"field":"value1"}]},"value"]"#,json_value.to_string());
Examples: Merge an object in an array with a wrong position will generate an error.
use serde_json::Value;
use json_value_merge::Merge;
let mut json_value: Value = serde_json::from_str(r#"[{"array1":[{"field":"value1"}]}]"#).unwrap();
let result = json_value.merge_in("/other_field", Value::String("value".to_string()));
assert!(result.is_err(), "The result should be an error because it's not possible to find or add an object in an array with a string field exept '*'");
assert_eq!(r#"[{"array1":[{"field":"value1"}]}]"#,json_value.to_string());
Examples: Build a new object.
use serde_json::{Map,Value};
use json_value_merge::Merge;
let mut object: Value = Value::default();
object.merge_in("/field", Value::String("value".to_string()));
object.merge_in("/object", Value::Object(Map::default()));
object.merge_in("/array/1", Value::Object(Map::default()));
object.merge_in("/array/2", Value::Array(Vec::default()));
object.merge_in("/array/*", Value::String("wildcard".to_string()));
object.merge_in("/root/*/item", Value::String("my_item".to_string()));
object.merge_in("///empty", Value::Null);
assert_eq!(r#"{"":{"":{"empty":null}},"array":[{},[],"wildcard"],"field":"value","object":{},"root":[{"item":"my_item"}]}"#, object.to_string());
Examples: Search and replace
use serde_json::{Map,Value};
use json_value_merge::Merge;
let mut object: Value = serde_json::from_str(r#"{"":{"":{"empty":null}},"array":[{},[],"wildcard"],"field":"value","1":null,"root":[{"item":"my_item"}]}"#).unwrap();
object.merge_in("/field", Value::String("my_new_value".to_string()));
object.merge_in("/1", Value::String("first field".to_string()));
object.merge_in("/array/2", Value::String("position two".to_string()));
object.merge_in("///empty", Value::String("not_item".to_string()));
assert_eq!(r#"{"":{"":{"empty":"not_item"}},"1":"first field","array":[{},[],"position two"],"field":"my_new_value","root":[{"item":"my_item"}]}"#, object.to_string());