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
						
					
					
				| # 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
 | |
| ``` |