A JSON Patch (RFC 6902) and JSON Merge Patch (RFC 7396) implementation for Rust.
Add this to your Cargo.toml:
[dependencies]
json-patch = "*"Create and patch document using JSON Patch:
#[macro_use]use json_patch::{Patch, patch};use serde_json::{from_value, json};letmut doc = json!([{"name":"Andrew"},{"name":"Maxim"}]);let p:Patch = from_value(json!([{"op":"test","path":"/0/name","value":"Andrew"},{"op":"add","path":"/0/happy","value":true}])).unwrap();patch(&mut doc,&p).unwrap();assert_eq!(doc, json!([{"name":"Andrew","happy":true},{"name":"Maxim"}]));Create and patch document using JSON Merge Patch:
#[macro_use]use json_patch::merge;use serde_json::json;letmut doc = json!({"title":"Goodbye!","author":{"givenName":"John","familyName":"Doe"},"tags":["example","sample"],"content":"This will be unchanged"});let patch = json!({"title":"Hello!","phoneNumber":"+01-123-456-7890","author":{"familyName": null
},"tags":["example"]});merge(&mut doc,&patch);assert_eq!(doc, json!({"title":"Hello!","author":{"givenName":"John"},"tags":["example"],"content":"This will be unchanged","phoneNumber":"+01-123-456-7890"}));Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.