Give an interface to merge two json_serde::Value together.
Toml
[dependencies]
json_value_merge = "2.0"
Merge two arrays:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut firstjsonvalue: Value = serdejson::fromstr(r#"["a","b"]"#).unwrap(); let secoundjsonvalue: Value = serdejson::fromstr(r#"["b","c"]"#).unwrap(); firstjsonvalue.merge(&secoundjsonvalue); asserteq!(r#"["a","b","c"]"#, firstjsonvalue.tostring()); } ```
Merge two objects:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut firstjsonvalue: Value = serdejson::fromstr(r#"[{"value":"a"},{"value":"b"}]"#).unwrap(); let secoundjsonvalue: Value = serdejson::fromstr(r#"[{"value":"b"},{"value":"c"}]"#).unwrap(); firstjsonvalue.merge(&secoundjsonvalue); asserteq!( r#"[{"value":"a"},{"value":"b"},{"value":"b"},{"value":"c"}]"#, firstjsonvalue.tostring() ); } ```
Merge two arrays in a specifique position:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut valuea: Value = serdejson::fromstr(r#"{"myarray":[{"a":"t"}]}"#).unwrap(); let valueb: Value = serdejson::fromstr(r#"["b","c"]"#).unwrap(); valuea.mergein("/myarray", &valueb); asserteq!(r#"{"myarray":[{"a":"t"},"b","c"]}"#, valuea.to_string()); } ```
Merge two objects in a specifique position:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut valuea: Value = serdejson::fromstr(r#"{"myarray":[{"a":"t"}]}"#).unwrap(); let valueb: Value = serdejson::fromstr(r#"{"b":"c"}"#).unwrap(); valuea.mergein("/myarray/0", &valueb); asserteq!(r#"{"myarray":[{"a":"t","b":"c"}]}"#, valuea.to_string()); } ```
Build new object:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut object: Value = Value::default(); object.mergein("/field", &Value::String("value".tostring())); object.mergein("/object", &Value::Object(Map::default())); object.mergein("/array/1", &Value::Object(Map::default())); object.mergein("/array/2", &Value::Array(Vec::default())); object.mergein("/array/", &Value::String("wildcard".to_string())); object.merge_in("/root//item", &Value::String("myitem".tostring())); object.mergein("///empty", &Value::Null); asserteq!(r#"{"":{"":{"empty":null}},"array":[{},[],"wildcard"],"field":"value","object":{},"root":[{"item":"myitem"}]}"#, object.tostring()); } ```
Replace an array by an object:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge; use serde_json::Value;
{ let mut jsonvalue: Value = serdejson::fromstr(r#"[{"array1":[{"field":"value1"}]}]"#).unwrap(); let result = jsonvalue.mergein("/otherfield", &Value::String("value".tostring())); asserteq!(r#"{"otherfield":"value"}"#,jsonvalue.to_string()); } ```
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.