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.

Merge a new value in specific json pointer. If the field can’t be merge in the specific path, it raise an error.

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());

Implementors