jsonvaluemerge

Actions Status

Give an interface to merge two json_serde::Value together.

Installation

Toml [dependencies] json_value_merge = "0.1"

Usage

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

Bench

```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 ```

Contributing

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.

License

Apache MIT