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

bin+lib json-unflattening

A Rust library for flattening and unflattening JSON structures

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

Download history 687/week @ 2024-08-04 1090/week @ 2024-08-11 1672/week @ 2024-08-18 930/week @ 2024-08-25 926/week @ 2024-09-01 813/week @ 2024-09-08 751/week @ 2024-09-15 686/week @ 2024-09-22 660/week @ 2024-09-29 682/week @ 2024-10-06 895/week @ 2024-10-13 413/week @ 2024-10-20 438/week @ 2024-10-27 627/week @ 2024-11-03 426/week @ 2024-11-10 684/week @ 2024-11-17

2,201 downloads per month
Used in 14 crates (via json-proof-token)

Apache-2.0

22KB
393 lines

json-unflattening

License

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:

  1. 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"
    }
    
  2. 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"
    }
    

Dependencies

~3.5–5.5MB
~102K SLoC