4 releases
0.1.3 | May 15, 2024 |
---|---|
0.1.2 | May 10, 2024 |
0.1.1 | May 10, 2024 |
0.1.0 | May 10, 2024 |
#13 in #memory-size
9KB
80 lines
sizeof_val - Estimate JSON Value Size
sizeof_val
is a Rust function that calculates an approximate size of a serde_json::Value
in bytes. It estimates the memory consumption of various types of JSON data and their nested structures.
Original code
Usage
Adding Dependencies
Add the following dependencies to your Cargo.toml
file:
[dependencies]
serde = "1.0"
serde_json = "1.0"
Importing and Using the Function
To use the sizeof_val
function, follow these steps:
-
Import the necessary modules:
use serde_json::{Value, json};
-
Define the
sizeof_val
function:use serde_json::Value; use std::mem::size_of; pub fn sizeof_val(v: &serde_json::Value) -> usize { size_of::<serde_json::Value>() + match v { Value::Null => 0, Value::Bool(_) => 0, Value::Number(_) => 0, // incorrect if arbitrary_precision is enabled Value::String(s) => s.capacity(), Value::Array(a) => a.iter().map(sizeof_val).sum(), Value::Object(o) => o .iter() .map(|(k, v)| { size_of::<String>() + k.capacity() + sizeof_val(v) + size_of::<usize>() * 3 //crude approximation, each map entry has 3 words of overhead }) .sum(), } }
-
Use the function to estimate the size of a JSON value:
fn main() { let val = json!({ "name": "OpenAI", "founded": 2015, "services": ["chatbot", "API"] }); let size = sizeof_val(&val); println!("Estimated size: {} bytes", size); }
Example
The following example demonstrates the use of the sizeof_val
function:
use serde_json::{Value, json};
fn main() {
let val = json!({
"name": "bread",
"amount": 2,
});
let size = sizeof_val(&val);
println!("Estimated size: {} bytes", size);
}
Caveats
- The estimation might not be precise for objects using arbitrary precision numbers.
- The estimation might vary depending on the specific architecture and implementation of the
serde_json
crate.
Contributing
Feel free to submit pull requests or open issues for any improvements or bugs related to the sizeof_val
function.
License
This project is licensed under the MIT License.
Dependencies
~0.5–1MB
~20K SLoC