Data structures and logic for resolving, assigning, and deleting by JSON Pointers (RFC 6901).
JSON Pointers can be created either with a slice of strings or directly from a properly encoded string representing a JSON Pointer.
```rust use jsonptr::{Pointer, Resolve, ResolveMut}; use serde_json::json;
fn main() { let mut data = json!({ "foo": { "bar": "baz" } });
let ptr = Pointer::new(&["foo", "bar"]);
ptr.resolve(&data);
let bar = data.resolve(&ptr).unwrap();
assert_eq!(bar, "baz");
let ptr = Pointer::try_from("/foo/bar").unwrap();
let mut bar = data.resolve_mut(&ptr).unwrap(); // alternatively: ptr.resolve_mut(&mut data);
assert_eq!(bar, "baz");
}
```
```rust use jsonptr::{Pointer, Assign}; use serde_json::json;
fn main() { let ptr = Pointer::tryfrom("/foo/bar").unwrap(); let mut data = json!({}); let val = json!("qux"); let assignment = data.assign(&ptr, val); asserteq!(data, json!({ "foo": { "bar": "qux" }})) } ```
```rust use jsonptr::{Pointer, Delete}; use serdejson::json; fn main() { let mut data = json!({ "foo": { "bar": { "baz": "qux" } } }); let ptr = Pointer::new(&["foo", "bar", "baz"]); asserteq!(data.delete(&ptr), Ok(Some("qux".into()))); assert_eq!(data, json!({ "foo": { "bar": {} } }));
// unresolved pointers return Ok(None)
let mut data = json!({});
let ptr = Pointer::new(&["foo", "bar", "baz"]);
assert_eq!(ptr.delete(&mut data), Ok(None));
assert_eq!(data, json!({}));
// replacing a root pointer replaces data with `Value::Null`
let mut data = json!({ "foo": { "bar": "baz" } });
let ptr = Pointer::default();
assert_eq!(data.delete(&ptr), Ok(Some(json!({ "foo": { "bar": "baz" } }))));
assert!(data.is_null());
} ```
| Flag | Enables |
| ---------- | ---------------------------------------------------------------------------------------------------------- |
| "std"
| implements std::error::Error
for errors |
| "url"
| implements TryFrom<url::Url>
for Pointer
|
| uniresid
| implements TryFrom<uniresid::Uri>
and TryFrom<uniresid::AbsoluteUri>
for Pointer
|
Contributions and feedback are always welcome and appreciated.
If you find an issue, please open a ticket or a pull request.
MIT or Apache 2.0.