See the [Release History](#release-history) for changes. ## Usage ```js const stringify = require('{%= name %}'); let obj = { a: 'a', b: { c: { d: { e: 'f' } } } }; console.log(stringify(obj)); //=> [ 'a', 'b.c.d.e' ] ``` Include values in the result: ```js console.log(stringify(obj, { values: true })); //=> { a: 'a', 'b.c.d.e': 'f' } ``` Keys with dots are automatically escaped with backslashes (this can be [customized](#optionsescape)): ```js let obj = { 'a.b.c': { d: 'e' } }; console.log(stringify(obj)); //=> [ 'a\\.b\\.c.d' ] console.log(stringify(obj, { values: true })); //=> { 'a\\.b\\.c.d': 'e' } ``` Objects with arrays return the array indices as part of the paths: ```js let obj = { a: 'a', b: [{ c: { d: 'e' } }, { f: { g: 'h' } }] }; console.log(stringify(obj)); //=> [ 'a', 'b.0.c.d', 'b.1.f.g' ] console.log(stringify(obj, { values: true })); //=> { a: 'a', 'b.0.c.d': 'e', 'b.1.f.g': 'h' } ``` ## Options ### options.separator **Type**: `string` **Default**: `.` Custom separator to use for creating object paths (`a.b.c`): **Example** ```js let obj = { 'a.b.c': { d: 'e' } }; console.log(stringify(obj, { separator: '/' })); //=> [ 'a.b.c/d' ] console.log(stringify(obj, { separator: '/', values: true })); //=> { 'a.b.c/d': 'e' } ``` ### options.escape **Type**: `function` **Default**: adds `\\` before dots Custom function to use for escaping keys. **Example** ```js let obj = { 'a.b.c': { d: 'e' } }; let escape = str => str.split('.').join('/'); console.log(stringify(obj, { escape })); //=> [ 'a/b/c.d' ] console.log(stringify(obj, { escape, values: true })); //=> { 'a/b/c.d': 'e' } ``` ## Release History ### v3.0 - Redundant (parent) keys are no longer included in the output. Thus `{ a: { b: 'c' } }` now returns `['a.b']` instead of `['a', 'a.b']`. ### v2.0 - Added support for traversing into arrays.