Spaces:
Paused
Paused
| # flat [](http://travis-ci.org/hughsk/flat) | |
| Take a nested Javascript object and flatten it, or unflatten an object with | |
| delimited keys. | |
| ## Installation | |
| ``` bash | |
| $ npm install flat | |
| ``` | |
| ## Methods | |
| ### flatten(original, options) | |
| Flattens the object - it'll return an object one level deep, regardless of how | |
| nested the original object was: | |
| ``` javascript | |
| var flatten = require('flat') | |
| flatten({ | |
| key1: { | |
| keyA: 'valueI' | |
| }, | |
| key2: { | |
| keyB: 'valueII' | |
| }, | |
| key3: { a: { b: { c: 2 } } } | |
| }) | |
| // { | |
| // 'key1.keyA': 'valueI', | |
| // 'key2.keyB': 'valueII', | |
| // 'key3.a.b.c': 2 | |
| // } | |
| ``` | |
| ### unflatten(original, options) | |
| Flattening is reversible too, you can call `flatten.unflatten()` on an object: | |
| ``` javascript | |
| var unflatten = require('flat').unflatten | |
| unflatten({ | |
| 'three.levels.deep': 42, | |
| 'three.levels': { | |
| nested: true | |
| } | |
| }) | |
| // { | |
| // three: { | |
| // levels: { | |
| // deep: 42, | |
| // nested: true | |
| // } | |
| // } | |
| // } | |
| ``` | |
| ## Options | |
| ### delimiter | |
| Use a custom delimiter for (un)flattening your objects, instead of `.`. | |
| ### safe | |
| When enabled, both `flat` and `unflatten` will preserve arrays and their | |
| contents. This is disabled by default. | |
| ``` javascript | |
| var flatten = require('flat') | |
| flatten({ | |
| this: [ | |
| { contains: 'arrays' }, | |
| { preserving: { | |
| them: 'for you' | |
| }} | |
| ] | |
| }, { | |
| safe: true | |
| }) | |
| // { | |
| // 'this': [ | |
| // { contains: 'arrays' }, | |
| // { preserving: { | |
| // them: 'for you' | |
| // }} | |
| // ] | |
| // } | |
| ``` | |
| ### object | |
| When enabled, arrays will not be created automatically when calling unflatten, like so: | |
| ``` javascript | |
| unflatten({ | |
| 'hello.you.0': 'ipsum', | |
| 'hello.you.1': 'lorem', | |
| 'hello.other.world': 'foo' | |
| }, { object: true }) | |
| // hello: { | |
| // you: { | |
| // 0: 'ipsum', | |
| // 1: 'lorem', | |
| // }, | |
| // other: { world: 'foo' } | |
| // } | |
| ``` | |
| ### overwrite | |
| When enabled, existing keys in the unflattened object may be overwritten if they cannot hold a newly encountered nested value: | |
| ```javascript | |
| unflatten({ | |
| 'TRAVIS': 'true', | |
| 'TRAVIS.DIR': '/home/travis/build/kvz/environmental' | |
| }, { overwrite: true }) | |
| // TRAVIS: { | |
| // DIR: '/home/travis/build/kvz/environmental' | |
| // } | |
| ``` | |
| Without `overwrite` set to `true`, the `TRAVIS` key would already have been set to a string, thus could not accept the nested `DIR` element. | |
| This only makes sense on ordered arrays, and since we're overwriting data, should be used with care. | |
| ### maxDepth | |
| Maximum number of nested objects to flatten. | |
| ``` javascript | |
| var flatten = require('flat') | |
| 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 } } | |
| // } | |
| ``` | |
| ### transformKey | |
| Transform each part of a flat key before and after flattening. | |
| ```javascript | |
| var flatten = require('flat') | |
| var unflatten = require('flat').unflatten | |
| flatten({ | |
| key1: { | |
| keyA: 'valueI' | |
| }, | |
| key2: { | |
| keyB: 'valueII' | |
| }, | |
| key3: { a: { b: { c: 2 } } } | |
| }, { | |
| transformKey: function(key){ | |
| return '__' + key + '__'; | |
| } | |
| }) | |
| // { | |
| // '__key1__.__keyA__': 'valueI', | |
| // '__key2__.__keyB__': 'valueII', | |
| // '__key3__.__a__.__b__.__c__': 2 | |
| // } | |
| unflatten({ | |
| '__key1__.__keyA__': 'valueI', | |
| '__key2__.__keyB__': 'valueII', | |
| '__key3__.__a__.__b__.__c__': 2 | |
| }, { | |
| transformKey: function(key){ | |
| return key.substring(2, key.length - 2) | |
| } | |
| }) | |
| // { | |
| // key1: { | |
| // keyA: 'valueI' | |
| // }, | |
| // key2: { | |
| // keyB: 'valueII' | |
| // }, | |
| // key3: { a: { b: { c: 2 } } } | |
| // } | |
| ``` | |
| ## Command Line Usage | |
| `flat` is also available as a command line tool. You can run it with | |
| [`npx`](https://ghub.io/npx): | |
| ```sh | |
| npx flat foo.json | |
| ``` | |
| Or install the `flat` command globally: | |
| ```sh | |
| npm i -g flat && flat foo.json | |
| ``` | |
| Accepts a filename as an argument: | |
| ```sh | |
| flat foo.json | |
| ``` | |
| Also accepts JSON on stdin: | |
| ```sh | |
| cat foo.json | flat | |
| ``` | |