Give an interface to merge two json_serde::Value together.
Add the following line to your Cargo.toml:
[dependencies]
json_value_merge = "x.y.z" # Replace with the latest version
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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());
}
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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":"b"},{"value":"c"}]"#,
first_json_value.to_string()
);
}
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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);
assert_eq!(r#"{"my_array":[{"a":"t"},"b","c"]}"#, value_a.to_string());
}
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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);
assert_eq!(r#"{"my_array":[{"a":"t","b":"c"}]}"#, value_a.to_string());
}
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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());
}
extern crate json_value_merge;
use json_value_merge::Merge;
use serde_json::Value;
{
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_eq!(r#"{"other_field":"value"}"#,json_value.to_string());
}
Contributions are welcome!
To contribute:
- Fork the repository and create your branch (git checkout -b feature/my-feature).
- Commit your changes (git commit -m 'Add some feature').
- Push to the branch (git push origin feature/my-feature).
- Open a pull request.
For major changes, please open an issue first to discuss your proposal.
Please ensure that tests are added or updated as appropriate.
Licensed under either of the following, at your option: