You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					187 lines
				
				3.2 KiB
			
		
		
			
		
	
	
					187 lines
				
				3.2 KiB
			| 
											3 years ago
										 | # 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 } } | ||
|  | // } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## 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 | ||
|  | ``` |