Expand description
This module holds the two dom implementations we use.
We distinguish between owned and borrowed. The difference being is that
the borrowed value will use &str
as its string type, referencing the input,
while owned will allocate a new String for each value.
Note that since JSON strings allow for escape sequences the borrowed value does not implement zero copy parsing, it does however not allocate new memory for strings.
This differs notably from Serde’s zero copy implementation as, unlike Serde, we do not require prior knowledge about string content to take advantage of it.
§Usage
The value trait is meant to simplify interacting with DOM values, for both creation as well as mutation and inspection.
Objects can be treated as hashmap’s for the most part
use simd_json::{OwnedValue as Value, prelude::*};
let mut v = Value::object();
v.insert("key", 42);
assert_eq!(v.get("key").unwrap(), &42);
assert_eq!(v["key"], &42);
assert_eq!(v.remove("key").unwrap().unwrap(), 42);
assert_eq!(v.get("key"), None);
Arrays can be treated as vectors for the most part
use simd_json::{OwnedValue as Value, prelude::*};
let mut v = Value::array();
v.push("zero");
v.push(1);
assert_eq!(v[0], &"zero");
assert_eq!(v.get_idx(1).unwrap(), &1);
assert_eq!(v.pop().unwrap().unwrap(), 1);
assert_eq!(v.pop().unwrap().unwrap(), "zero");
assert_eq!(v.pop().unwrap(), None);
Nested changes are also possible:
use simd_json::{OwnedValue as Value, prelude::*};
let mut o = Value::object();
o.insert("key", Value::array());
o["key"].push(Value::object());
o["key"][0].insert("other", "value");
assert_eq!(o.encode(), r#"{"key":[{"other":"value"}]}"#);
Borrowed values, using Cow’s for strings using in situ parsing strategies wherever possible
Enums§
- Borrowed JSON-DOM Value, consider using the
ValueTrait
to access its content
Functions§
- Parses a slice of bytes into a Value dom.
- Parses a slice of bytes into a Value dom.
Type Aliases§
- Representation of a JSON array
- Representation of a JSON object