5 releases
0.1.4 | Sep 18, 2024 |
---|---|
0.1.3 | Dec 14, 2023 |
0.1.2 | Dec 6, 2023 |
0.1.1 | Dec 6, 2023 |
0.1.0 | Dec 6, 2023 |
#340 in Encoding
2,201 downloads per month
Used in 14 crates
(via json-proof-token)
22KB
393 lines
json-unflattening
A Rust library for flattening and unflattening JSON structures. Uses serde_json
for JSON serialization and deserialization.
Features
- Flatten JSON: Convert nested JSON structures into a flattened form.
- Unflatten JSON: Convert flattened JSON structures back to nested form.
Installation
Add this library to your Cargo.toml
:
[dependencies]
json-unflattening = "0.1.4"
Usage
use json_unflattening::{flatten, unflatten};
fn main() {
let input_json = json!({
"name": {
"first": "John",
"last": "Doe"
},
"age": 30,
"city": "New York",
"hobbies": ["Reading", "Hiking", "Gaming"]
});
let flattened_json = flatten(&input_json).unwrap();
println!("Flattened JSON: {:#}", serde_json::to_string_pretty(&flattened_json).unwrap());
let unflattened_json = unflatten(&flattened_json).unwrap();
println!("Unflattened JSON: {:#}", unflattened_json);
}
Example
Original JSON
{
"name": {
"first": "John",
"last": "Doe"
},
"age": 30,
"city": "New York",
"hobbies": ["Reading", "Hiking", "Gaming"]
}
Flattened JSON
{
"name.first": "John",
"name.last": "Doe",
"age": 30,
"city": "New York",
"hobbies[0]": "Reading",
"hobbies[1]": "Hiking",
"hobbies[2]": "Gaming"
}
Flattening process:
-
Flatten Object Properties:
- Flatten the
"name"
object properties using dot notation:"name.first"
and"name.last"
. - Flatten the scalar properties
"age"
and"city"
directly without modification.
Result:
{ "name.first": "John", "name.last": "Doe", "age": 30, "city": "New York" }
- Flatten the
-
Flatten Array Elements:
- Flatten the array
"hobbies"
by appending indices to each element:"hobbies[0]"
,"hobbies[1]"
, and"hobbies[2]"
.
Result:
{ "name.first": "John", "name.last": "Doe", "age": 30, "city": "New York", "hobbies[0]": "Reading", "hobbies[1]": "Hiking", "hobbies[2]": "Gaming" }
- Flatten the array
Dependencies
~3.5–5.5MB
~102K SLoC