https://github.com/danilofuchs/flat
Take a nested Map and flatten it with delimited keys
https://github.com/danilofuchs/flat
dart flat pubdev
Last synced: 28 days ago
JSON representation
Take a nested Map and flatten it with delimited keys
- Host: GitHub
- URL: https://github.com/danilofuchs/flat
- Owner: danilofuchs
- License: mit
- Created: 2020-02-21T00:35:40.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-11-07T17:01:25.000Z (over 2 years ago)
- Last Synced: 2023-12-08T01:00:50.056Z (over 2 years ago)
- Topics: dart, flat, pubdev
- Language: Dart
- Size: 19.5 KB
- Stars: 8
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# flat
Take a nested Map and flatten it with delimited keys. Entirely based on node.js [flat](https://www.npmjs.com/package/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`
```dart
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.
```dart
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.
```dart
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.
```dart
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 `.`