Crates.io | smooth-json |
lib.rs | smooth-json |
version | 0.2.7 |
source | src |
created_at | 2024-03-15 01:32:11.267398 |
updated_at | 2024-10-21 13:20:34.922997 |
description | smooth-json is an opinionated, customizable utility to flatten serde_json Value variants into serde_json Objects ready for use in columnar or table-like usages. |
homepage | |
repository | https://github.com/latonis/smooth-json |
max_upload_size | |
id | 1174302 |
size | 23,459 |
This crate allows for flattening JSON objects into objects ready for use in Parquet, CSV, or other data formats.
The flattening is similar to ElasticSearch's ingestion flattening or what would be needed for VAST's DB and Table integrations.
Value
variants into structures suitable for use with applications that are expecting table formatted data or columnar data formats.Flattener
and passing the separator.use smooth_json;
use serde_json::json;
fn main() {
let flattener = smooth_json::Flattener::new();
let example = json!({
"name": "John Doe",
"age": 43,
"address": {
"street": "10 Downing Street",
"city": "London"
},
"phones": [
"+44 1234567",
"+44 2345678"
]
});
let flattened_example = flattener.flatten(&example);
println!("{}", flattened_example);
/*
{
"address.city": "London",
"address.street": "10 Downing Street",
"age": 43,
"name": "John Doe",
"phones": [
"+44 1234567",
"+44 2345678"
]
}
*/
}
use serde_json::json;
use smooth_json;
fn main() {
let flattener = smooth_json::Flattener{
separator: "$",
..Default::default()
};
let example = json!({
"a": {
"b": 1
}});
let flattened_example = flattener.flatten(&example);
println!("{}", flattened_example);
/*
{
"a$b": 1
}
*/
}
If an object is present in an array, the result will be in an array when flattened.
use serde_json::json;
use smooth_json;
fn main() {
let flattener = smooth_json::Flattener{
alt_array_flattening: true,
..Default::default()
};
let example = json!({
"a": [
["b", "c"],
{ "d": "e" },
["f", "g"],
[
{ "h": "i" },
{ "d": "j" },
],
["k", "l"],
]
});
let flattened_example = flattener.flatten(&example);
println!("{}", flattened_example);
/*
{
"a": ["b", "c", "f", "g", "k", "l"],
"a.d": ["e", "j"],
"a.h": ["i"],
}
*/
}
use serde_json::json;
use smooth_json;
fn main() {
let flattener = smooth_json::Flattener{
preserve_arrays: true,
..Default::default()
};
let example: Value = json!({
"a": [
"b",
["c", "d"],
]
});
let flattened_example = flattener.flatten(&example);
println!("{}", flattened_example);
/*
{
"a.0": "b",
"a.1.0": "c",
"a.1.1": "d"
}
*/