flat 0.5.0 copy "flat: ^0.5.0" to clipboard
flat: ^0.5.0 copied to clipboard

0 dependency package to convert a nested Map and flatten it into a single depth Map, and recover it later. Based on Node.js `flat` package.

flat #

Take a nested Map and flatten it with delimited keys. Entirely based on node.js flat.

It does not achieve feature parity yet, as some options are missing from flatten (transformKey) and unflatten (object, overwrite, transformKey).

Currently, it bails out of a tree if it finds something different than a Map or List when flatening, or a nested Map or List when unflattening.

Methods #

flatten #

import 'package:flat/flat.dart';

flatten(
    {
      "a": 1,
      "list1": ["item1", "item2"],
      "f": {
        "list2": ["item3", "item4", "item5"],
        "g": 2,
        "h": true,
        "j": "text",
      },
    },
  );

// {
//   "a": 1,
//   "list1.0": "item1",
//   "list1.1": "item2",
//   "f.list2.0": "item3",
//   "f.list2.1": "item4",
//   "f.list2.2": "item5",
//   "f.g": 2,
//   "f.h": true,
//   "f.j": "text"
// }

delimiter

Use a custom delimiter for flattening your objects, instead of .

safe

When enabled, flat will preserve arrays and their contents. This is disabled by default.

import 'package:flat/flat.dart';

flatten({
  'this': [
    {'contains': 'arrays'},
    {
      'preserving': {'them': 'for you'}
    }
  ]
}, safe: true);

// {
//   'this': [
//     {'contains': 'arrays'},
//     {
//       'preserving': {'them': 'for you'}
//     }
//   ]
// };

maxDepth

Maximum number of nested objects to flatten.

import 'package:flat/flat.dart';

flatten({
  'key1': {'keyA': 'valueI'},
  'key2': {'keyB': 'valueII'},
  'key3': {
    'a': {
      'b': {'c': 2}
    }
  }
}, maxDepth: 2);

// {
//   'key1.keyA': 'valueI',
//   'key2.keyB': 'valueII',
//   'key3.a': {
//     'b': {'c': 2}
//   }
// };

unflatten #

Reverse process from flatten.

Only supports completely flat maps as input.

unflatten({
  "a": 1,
  "list1.0": "item1",
  "list1.1": "item2",
  "f.list2.0": "item3",
  "f.list2.1": "item4",
  "f.list2.2": "item5",
  "f.g": 2,
  "f.h": true,
  "f.j": "text"
});

// {
//   "a": 1,
//   "list1": ["item1", "item2"],
//   "f": {
//     "list2": ["item3", "item4", "item5"],
//     "g": 2,
//     "h": true,
//     "j": "text",
//   },
// }

delimiter

Use a custom delimiter for unflattening your objects, instead of .

13
likes
160
points
14.8k
downloads

Publisher

unverified uploader

Weekly Downloads

0 dependency package to convert a nested Map and flatten it into a single depth Map, and recover it later. Based on Node.js `flat` package.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on flat