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.
Pointer::resolve
```rust use jsonptr::Pointer; use serde_json::json;
let mut data = json!({"foo": { "bar": "baz" }}); let ptr = Pointer::new(["foo", "bar"]); let bar = ptr.resolve(&data).unwrap(); assert_eq!(bar, "baz"); ```
Resolve::resolve
```rust use jsonptr::{Pointer, Resolve}; use serde_json::json;
let mut data = json!({ "foo": { "bar": "baz" }}); let ptr = Pointer::new(["foo", "bar"]); let bar = data.resolve(&ptr).unwrap(); assert_eq!(bar, "baz");
```
ResolveMut::resolve_mut
```rust use jsonptr::{Pointer, ResolveMut}; use serde_json::json;
let ptr = Pointer::tryfrom("/foo/bar").unwrap(); let mut data = json!({ "foo": { "bar": "baz" }}); let mut bar = data.resolvemut(&ptr).unwrap(); assert_eq!(bar, "baz"); ```
Pointer::assign
```rust use jsonptr::Pointer; use serde_json::json;
let ptr = Pointer::tryfrom("/foo/bar").unwrap(); let mut data = json!({}); let _previous = ptr.assign(&mut data, "qux").unwrap(); asserteq!(data, json!({ "foo": { "bar": "qux" }})) ```
Assign::asign
```rust use jsonptr::{Assign, Pointer}; use serde_json::json;
let ptr = Pointer::tryfrom("/foo/bar").unwrap(); let mut data = json!({}); let _previous = data.assign(&ptr, "qux").unwrap(); asserteq!(data, json!({ "foo": { "bar": "qux" }})) ```
Pointer::delete
```rust use jsonptr::Pointer; use serde_json::json;
let mut data = json!({ "foo": { "bar": { "baz": "qux" } } }); let ptr = Pointer::new(&["foo", "bar", "baz"]); asserteq!(ptr.delete(&mut data), Some("qux".into())); asserteq!(data, json!({ "foo": { "bar": {} } }));
// unresolved pointers return None let mut data = json!({}); assert_eq!(ptr.delete(&mut data), None); ```
Delete::delete
```rust use jsonptr::{Pointer, Delete}; use serde_json::json;
let mut data = json!({ "foo": { "bar": { "baz": "qux" } } }); let ptr = Pointer::new(["foo", "bar", "baz"]); asserteq!(ptr.delete(&mut data), Some("qux".into())); asserteq!(data, json!({ "foo": { "bar": {} } }));
// replacing a root pointer replaces data with Value::Null
let ptr = Pointer::default();
let deleted = json!({ "foo": { "bar": {} } });
asserteq!(data.delete(&ptr), Some(deleted));
assert!(data.isnull());
```
| Flag | Enables |
| :------------: | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| "std"
| implements std::error::Error
for errors |
| "url"
| TryFrom<url::Url>
for Pointer
|
| "uniresid"
| TryFrom<uniresid::Uri>
+ TryFrom<uniresid::AbsoluteUri>
for Pointer
|
| "fluent-uri"
| TryFrom<fluent_uri::Uri<&str>>
+ TryFrom<fluent_uri::Uri<String>>
+ TryFrom<fluent_uri::Uri<&mut [u8]>>
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.
```
```