Crates.io | value-ext |
lib.rs | value-ext |
version | 0.1.1 |
source | src |
created_at | 2024-09-04 04:48:58.536589 |
updated_at | 2024-11-11 06:04:20.439422 |
description | Serde Json Value Extension Trait (more Value type later) |
homepage | https://github.com/jeremychone/rust-value-ext |
repository | https://github.com/jeremychone/rust-value-ext |
max_upload_size | |
id | 1362794 |
size | 34,927 |
An extension trait for working with JSON values in a more convenient way. JsonValueExt
offers convenient methods for interacting with serde_json::Value
objects, simplifying tasks like getting, taking, inserting, traversing, and pretty-printing JSON data while ensuring type safety with Serde's serialization and deserialization.
x_new_object
: Creates a new Value::Object
.x_get
: Returns a value of a specified type T
from a JSON object using either a direct name or a pointer path.x_get_as
: Returns a reference of a specified type T
from a JSON object using either a direct name or a pointer path, avoiding allocations for types that implement AsType
.x_get_str
: Returns a &str
from a JSON object using either a direct name or a pointer path.x_get_i64
: Returns an i64
from a JSON object using either a direct name or a pointer path.x_get_f64
: Returns an f64
from a JSON object using either a direct name or a pointer path.x_get_bool
: Returns a bool
from a JSON object using either a direct name or a pointer path.x_take
: Takes a value from a JSON object using a specified name or pointer path, replacing it with Null
.x_insert
: Inserts a value of type T
into a JSON object at the specified name or pointer path, creating any missing objects along the way.x_walk
: Traverses all properties within the JSON value tree, applying a user-provided callback function to each property.x_pretty
: Returns a pretty-printed string representation of the JSON value.This trait is intended to be used with serde_json::Value
objects. It is particularly useful when you need to manipulate JSON structures dynamically or when the structure of the JSON is not known at compile time.
use serde_json::{Value, Map};
use serde::de::DeserializeOwned;
use serde::Serialize;
use your_crate::JsonValueExt;
fn example_usage(json: &mut Value) -> Result<(), Box<dyn std::error::Error>> {
// Create a new object
let new_object = Value::x_new_object();
// Get a value from JSON
let name: String = json.x_get("/name")?;
// Take a value from JSON, replacing it with `Null`
let age: u32 = json.x_take("age")?;
// Insert a new value into JSON
json.x_insert("city", "New York")?;
// Walk through the JSON properties
json.x_walk(|parent_map, property_name| {
println!("Property: {}", property_name);
true // Continue traversal
});
// Get a pretty-printed JSON string
let pretty_json = json.x_pretty()?;
println!("{}", pretty_json);
Ok(())
}
This trait enhances the serde_json::Value
API by adding more type-safe and convenient methods for manipulating JSON data in Rust.