Struct RawJson

Source
pub struct RawJson<'text> { /* private fields */ }
Expand description

Parsed JSON text (syntactically correct, but not yet converted to Rust types).

This struct holds a JSON text in its original form (i.e., JSON integers are not converted to Rust’s integers), while ensuring the text is valid JSON syntax.

RawJson maintains index information about each JSON value in the text, including its type (JsonValueKind) and the start and end byte positions. You can traverse the JSON structure by accessing the top-level value via RawJson::value(), which returns a RawJsonValue that provides methods to explore nested elements and convert them into Rust types.

Note that, for simple use cases, using Json, which internally uses RawJson, is a more convenient way to parse JSON text into Rust types.

Implementations§

Source§

impl<'text> RawJson<'text>

Source

pub fn parse(text: &'text str) -> Result<Self, JsonParseError>

Parses a JSON string into a RawJson instance.

This validates the JSON syntax without converting values to Rust types.

§Example
let text = r#"{"name": "John", "age": 30}"#;
let json = RawJson::parse(text)?;
Source

pub fn text(&self) -> &'text str

Returns the original JSON text.

Source

pub fn value(&self) -> RawJsonValue<'text, '_>

Returns the top-level value of the JSON.

This value can be used as an entry point to traverse the entire JSON structure and convert it to Rust types.

§Example
let text = r#"{"name": "John", "age": 30}"#;
let json = RawJson::parse(text).unwrap();
let value = json.value();
Source

pub fn get_value_by_position( &self, position: usize, ) -> Option<RawJsonValue<'text, '_>>

Finds the JSON value at the specified byte position in the original text.

This method traverses the JSON structure to find the most specific value that contains the given position. It returns None if the position is outside the bounds of the JSON text.

This method is useful for retrieving the context where a JsonParseError::InvalidValue error occurred.

§Example
let json = RawJson::parse(r#"{"name": "John", "age": 30}"#)?;

// Position at "name" key
let name_value = json.get_value_by_position(2).expect("infallible");
assert_eq!(name_value.as_raw_str(), r#""name""#);

// Position at number value
let age_value = json.get_value_by_position(25).expect("infallible");
assert_eq!(age_value.as_raw_str(), "30");
Source

pub fn into_owned(self) -> RawJsonOwned

Converts this borrowed RawJson into an owned RawJsonOwned.

This method creates an owned copy of the JSON data, allowing it to be used beyond the lifetime of the original text. The resulting RawJsonOwned contains its own copy of the JSON text and can be moved freely.

§Example
let text = r#"{"name": "John", "age": 30}"#;
let json = RawJson::parse(text)?;
let owned_json = json.into_owned();

// The owned version can outlive the original text
drop(text);
assert_eq!(owned_json.text(), r#"{"name": "John", "age": 30}"#);

Trait Implementations§

Source§

impl<'text> Clone for RawJson<'text>

Source§

fn clone(&self) -> RawJson<'text>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'text> Debug for RawJson<'text>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for RawJson<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DisplayJson for RawJson<'_>

Source§

fn fmt(&self, f: &mut JsonFormatter<'_, '_>) -> Result

Formats the value as JSON into the provided formatter. Read more
Source§

impl Hash for RawJson<'_>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for RawJson<'_>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for RawJson<'_>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for RawJson<'_>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<'text, 'raw> TryFrom<RawJsonValue<'text, 'raw>> for RawJson<'text>

Source§

type Error = JsonParseError

The type returned in the event of a conversion error.
Source§

fn try_from(value: RawJsonValue<'text, 'raw>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl Eq for RawJson<'_>

Auto Trait Implementations§

§

impl<'text> Freeze for RawJson<'text>

§

impl<'text> RefUnwindSafe for RawJson<'text>

§

impl<'text> Send for RawJson<'text>

§

impl<'text> Sync for RawJson<'text>

§

impl<'text> Unpin for RawJson<'text>

§

impl<'text> UnwindSafe for RawJson<'text>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.