#json-object #elasticsearch #flatten #json #serde-json #elastic #search

bin+lib flatten-serde-json

Flatten serde-json objects like elastic search

1 unstable release

0.1.0 Feb 23, 2022

#2616 in Command line utilities

Download history 407/week @ 2024-06-30 310/week @ 2024-07-07 237/week @ 2024-07-14 230/week @ 2024-07-21 214/week @ 2024-07-28 526/week @ 2024-08-04 512/week @ 2024-08-11 371/week @ 2024-08-18 680/week @ 2024-08-25 803/week @ 2024-09-01 641/week @ 2024-09-08 1072/week @ 2024-09-15 1026/week @ 2024-09-22 1086/week @ 2024-09-29 2343/week @ 2024-10-06 1418/week @ 2024-10-13

5,955 downloads per month
Used in 2 crates (via border-mlflow-tracking)

WTFPL license

10KB
241 lines

Flatten serde Json

This crate flatten serde_json Object in a format similar to elastic search.

Examples

There is nothing to do

{
  "id": "287947",
  "title": "Shazam!",
  "release_date": 1553299200,
  "genres": [
    "Action",
    "Comedy",
    "Fantasy"
  ]
}

Flattens to:

{
  "id": "287947",
  "title": "Shazam!",
  "release_date": 1553299200,
  "genres": [
    "Action",
    "Comedy",
    "Fantasy"
  ]
}

Objects

{
  "a": {
    "b": "c",
    "d": "e",
    "f": "g"
  }
}

Flattens to:

{
  "a.b": "c",
  "a.d": "e",
  "a.f": "g"
}

Array of objects

{
  "a": [
    { "b": "c" },
    { "b": "d" },
    { "b": "e" },
  ]
}

Flattens to:

{
  "a.b": ["c", "d", "e"],
}

Array of objects with normal value in the array

{
  "a": [
    42,
    { "b": "c" },
    { "b": "d" },
    { "b": "e" },
  ]
}

Flattens to:

{
  "a": 42,
  "a.b": ["c", "d", "e"],
}

Array of objects of array of objects of ...

{
  "a": [
    "b",
    ["c", "d"],
    { "e": ["f", "g"] },
    [
        { "h": "i" },
        { "e": ["j", { "z": "y" }] },
    ],
    ["l"],
    "m",
  ]
}

Flattens to:

{
  "a": ["b", "c", "d", "l", "m"],
  "a.e": ["f", "g", "j"],
  "a.h": "i",
  "a.e.z": "y",
}

Collision between a generated field name and an already existing field

{
  "a": {
    "b": "c",
  },
  "a.b": "d",
}

Flattens to:

{
  "a.b": ["c", "d"],
}

Dependencies

~0.5–1MB
~20K SLoC