4 个版本
0.1.3 | 2023 年 12 月 14 日 |
---|---|
0.1.2 | 2023 年 12 月 6 日 |
0.1.1 | 2023 年 12 月 6 日 |
0.1.0 | 2023 年 12 月 6 日 |
#346 在 编码
5,280 每月下载量
在 12 个包中使用 (通过 json-proof-token)
21KB
390 行
json-unflattening
用于折叠和解折叠 JSON 结构的 Rust 库。使用 serde_json
进行 JSON 序列化和反序列化。
特性
- 折叠 JSON:将嵌套 JSON 结构转换为扁平形式。
- 解折叠 JSON:将扁平 JSON 结构转换回嵌套形式。
安装
将此库添加到您的 Cargo.toml
[dependencies]
json-unflattening = "0.1.3"
使用
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);
}
示例
原始 JSON
{
"name": {
"first": "John",
"last": "Doe"
},
"age": 30,
"city": "New York",
"hobbies": ["Reading", "Hiking", "Gaming"]
}
折叠后的 JSON
{
"name.first": "John",
"name.last": "Doe",
"age": 30,
"city": "New York",
"hobbies[0]": "Reading",
"hobbies[1]": "Hiking",
"hobbies[2]": "Gaming"
}
折叠过程
-
折叠对象属性
- 使用点符号折叠
"name"
对象属性:"name.first"
和"name.last"
。 - 直接折叠标量属性
"age"
和"city"
而不进行修改。
结果
{ "name.first": "John", "name.last": "Doe", "age": 30, "city": "New York" }
- 使用点符号折叠
-
折叠数组元素
- 通过向每个元素添加索引来折叠数组
"hobbies"
:"hobbies[0]"
、"hobbies[1]"
和"hobbies[2]"
。
结果
{ "name.first": "John", "name.last": "Doe", "age": 30, "city": "New York", "hobbies[0]": "Reading", "hobbies[1]": "Hiking", "hobbies[2]": "Gaming" }
- 通过向每个元素添加索引来折叠数组
依赖项
~3.5–5.5MB
~100K SLoC