Trait json_value_merge::Merge
source · pub trait Merge {
// Required methods
fn merge(&mut self, new_value: &Value);
fn merge_in(&mut self, json_pointer: &str, new_value: &Value) -> Result<()>;
}
Expand description
Trait used to merge Json Values
Required Methods§
Implementations on Foreign Types§
source§impl Merge for Value
impl Merge for Value
source§fn merge(&mut self, new_json_value: &Value)
fn merge(&mut self, new_json_value: &Value)
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());
source§fn merge_in(&mut self, json_pointer: &str, new_value: &Value) -> Result<()>
fn merge_in(&mut self, json_pointer: &str, new_value: &Value) -> Result<()>
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);
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);
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: Replace an Array by an Object.
use serde_json::Value;
use json_value_merge::Merge;
let mut json_value: Value =
serde_json::from_str(r#"{"my_array":[{"field1":"value1"}]}"#).unwrap();
let json_value_to_merge: Value = serde_json::from_str(r#"{"a":"b"}"#).unwrap();
json_value
.merge_in("/my_array/T/field2", &json_value_to_merge)
.unwrap();
assert_eq!(
r#"{"my_array":{"T":{"field2":{"a":"b"}}}}"#,
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());