jsonptr - JSON Pointers for Rust

github crates.io docs.rs build status

Data structures and logic for resolving, assigning, and deleting by JSON Pointers (RFC 6901).

Usage

JSON Pointers can be created either with a slice of strings or directly from a properly encoded string representing a JSON Pointer.

Resolve values

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"); ```

Assign

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" }})) ```

Delete

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()); ```

Feature Flags

| 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 / Issues

Contributions and feedback are always welcome and appreciated.

If you find an issue, please open a ticket or a pull request.

License

MIT or Apache 2.0.

```

```