json_value_merge 0.1.3

Interface to merge serde_json::Value.
Documentation

json_value_merge

Actions Status

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

Installation

[dependencies]
json_value_merge = "0.1"

Usage

Merge two arrays:

extern crate json_value_merge;

use json_value_merge::Merge;

{
    let mut first_json_value: Value = serde_json::from_str(r#"["a","b"]"#).unwrap();
    let secound_json_value: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
    first_json_value.merge(secound_json_value);
    assert_eq!(r#"["a","b","c"]"#, first_json_value.to_string());
}

Merge two objects:

extern crate json_value_merge;

use json_value_merge::Merge;

{
    let mut first_json_value: Value =
        serde_json::from_str(r#"[{"value":"a"},{"value":"b"}]"#).unwrap();
    let secound_json_value: Value =
        serde_json::from_str(r#"[{"value":"b"},{"value":"c"}]"#).unwrap();
    first_json_value.merge(secound_json_value);
    assert_eq!(
        r#"[{"value":"a"},{"value":"b"},{"value":"c"}]"#,
        first_json_value.to_string()
    );
}

Merge two arrays in a specifique position:

extern crate json_value_merge;

use json_value_merge::Merge;

{
    let mut value_a: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
    let value_b: Value = serde_json::from_str(r#"["b","c"]"#).unwrap();
    value_a.merge_in("/my_array", value_b.clone());
    assert_eq!(r#"{"my_array":[{"a":"t"},"b","c"]}"#, value_a.to_string());
}

Merge two objects in a specifique position:

extern crate json_value_merge;

use json_value_merge::Merge;

{
    let mut value_a: Value = serde_json::from_str(r#"{"my_array":[{"a":"t"}]}"#).unwrap();
    let value_b: Value = serde_json::from_str(r#"{"b":"c"}"#).unwrap();
    value_a.merge_in("/my_array/0", value_b.clone());
    assert_eq!(r#"{"my_array":[{"a":"t","b":"c"}]}"#, value_a.to_string());
}

Build new object:

extern crate json_value_merge;

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", Value::Array(Vec::default()));
    assert_eq!(
        r#"{"array":[],"field":"value","object":{}}"#,
        object.to_string()
    );
}

Bench

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 json_value.merge_in(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 json_value.merge_in(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 json_value.merge_in(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 json_value.merge_in(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