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