Give an interface to merge two json_serde::Value together.
Toml
[dependencies]
json_value_merge = "0.1"
Merge two arrays:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge;
{ 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;
{ 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":"c"}]"#, firstjsonvalue.tostring() ); } ```
Merge two arrays in a specifique position:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge;
{ let mut valuea: Value = serdejson::fromstr(r#"{"myarray":[{"a":"t"}]}"#).unwrap(); let valueb: Value = serdejson::fromstr(r#"["b","c"]"#).unwrap(); valuea.mergein("/myarray", valueb.clone()); asserteq!(r#"{"myarray":[{"a":"t"},"b","c"]}"#, valuea.to_string()); } ```
Merge two objects in a specifique position:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge;
{ 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.clone()); asserteq!(r#"{"myarray":[{"a":"t","b":"c"}]}"#, valuea.to_string()); } ```
Build new object:
```rust extern crate jsonvaluemerge;
use jsonvaluemerge::Merge;
{ let mut object: Value = Value::default(); object.mergein("/field", Value::String("value".tostring())); object.mergein("/object", Value::Object(Map::default())); object.mergein("/array", Value::Array(Vec::default())); asserteq!( r#"{"array":[],"field":"value","object":{}}"#, object.tostring() ); } ```
```Bash Merge/Bench json_value.merge(null). time: [7.7932 ns 7.8098 ns 7.8353 ns] change: [-0.2730% +0.4027% +1.0706%] (p = 0.25 > 0.05) No change in performance detected. Found 11 outliers among 100 measurements (11.00%) 4 (4.00%) high mild 7 (7.00%) high severe
Merge/Bench json_value.merge(string). time: [45.939 ns 45.988 ns 46.049 ns] change: [-0.6558% +0.1228% +0.8434%] (p = 0.76 > 0.05) No change in performance detected. Found 15 outliers among 100 measurements (15.00%) 3 (3.00%) high mild 12 (12.00%) high severe
Merge/Bench json_value.merge(array). time: [500.95 us 535.75 us 567.63 us] change: [-0.9322% +6.6158% +14.919%] (p = 0.10 > 0.05) No change in performance detected. Found 5 outliers among 100 measurements (5.00%) 5 (5.00%) high mild
Merge/Bench json_value.merge(object). time: [314.60 ns 316.69 ns 318.88 ns] change: [+1.4743% +2.7929% +3.8830%] (p = 0.00 < 0.05) Performance has regressed. Found 10 outliers among 100 measurements (10.00%) 7 (7.00%) high mild 3 (3.00%) high severe
Merge in/Bench jsonvalue.mergein(pointer, null). time: [295.13 ns 297.23 ns 299.74 ns] change: [-8.4767% -7.5709% -6.5915%] (p = 0.00 < 0.05) Performance has improved. Found 10 outliers among 100 measurements (10.00%) 6 (6.00%) high mild 4 (4.00%) high severe
Merge in/Bench jsonvalue.mergein(pointer, string). time: [338.77 ns 342.75 ns 347.36 ns] change: [-8.2556% -6.5970% -5.2257%] (p = 0.00 < 0.05) Performance has improved. Found 11 outliers among 100 measurements (11.00%) 5 (5.00%) high mild 6 (6.00%) high severe
Merge in/Bench jsonvalue.mergein(pointer, object). time: [651.13 ns 652.80 ns 654.73 ns] change: [-0.5400% +1.0663% +3.3065%] (p = 0.32 > 0.05) No change in performance detected. Found 11 outliers among 100 measurements (11.00%) 4 (4.00%) high mild 7 (7.00%) high severe
Merge in/Bench jsonvalue.mergein(pointer, array). time: [435.32 ns 437.06 ns 438.97 ns] change: [-2.9152% -2.3497% -1.7253%] (p = 0.00 < 0.05) Performance has improved. Found 10 outliers among 100 measurements (10.00%) 8 (8.00%) high mild 2 (2.00%) high severe ```
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.