simd_json::value

Module borrowed

source
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§

Type Aliases§

  • Representation of a JSON array
  • Representation of a JSON object