#json #serde-json #flattening #serde #serialization #unflattening #flatten-json

bin+lib json-unflattening

用于折叠和解折叠 JSON 结构的 Rust 库

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编码

Download history 11/week @ 2024-03-13 7/week @ 2024-03-20 21/week @ 2024-03-27 24/week @ 2024-04-03 14/week @ 2024-04-10 16/week @ 2024-04-17 93/week @ 2024-04-24 17/week @ 2024-05-01 39/week @ 2024-05-08 49/week @ 2024-05-15 180/week @ 2024-05-22 1315/week @ 2024-05-29 1901/week @ 2024-06-05 1245/week @ 2024-06-12 909/week @ 2024-06-19 1092/week @ 2024-06-26

5,280 每月下载量
12 个包中使用 (通过 json-proof-token)

Apache-2.0

21KB
390

json-unflattening

License

用于折叠和解折叠 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"
}

折叠过程

  1. 折叠对象属性

    • 使用点符号折叠 "name" 对象属性:"name.first""name.last"
    • 直接折叠标量属性 "age""city" 而不进行修改。

    结果

    {
      "name.first": "John",
      "name.last": "Doe",
      "age": 30,
      "city": "New York"
    }
    
  2. 折叠数组元素

    • 通过向每个元素添加索引来折叠数组 "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