| # flatted |
| |
|  [](https://coveralls.io/github/WebReflection/flatted?branch=master) [](https://travis-ci.org/WebReflection/flatted) [](https://opensource.org/licenses/ISC)  |
| |
| A super light (0.5K) and fast circular JSON parser, directly from the creator of [CircularJSON](https://github.com/WebReflection/circular-json/#circularjson). |
| |
| Usable via [CDN](https://unpkg.com/flatted) or as regular module. |
| |
| ```js |
| // ESM |
| import {parse, stringify} from 'flatted/esm'; |
| |
| // CJS |
| const {parse, stringify} = require('flatted/cjs'); |
| |
| const a = [{}]; |
| a[0].a = a; |
| a.push(a); |
| |
| stringify(a); // [["1","0"],{"a":"0"}] |
| ``` |
| |
| ### New in V1: Exact same JSON API |
| |
| * Added a [reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Syntax) parameter to `.parse(string, reviver)` and revive your own objects. |
| * Added a [replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Syntax) and a `space` parameter to `.stringify(object, replacer, space)` for feature parity with JSON signature. |
| |
| |
| ### Compatibility |
| All ECMAScript engines compatible with `Map`, `Set`, `Object.keys`, and `Array.prototype.reduce` will work, even if polyfilled. |
| |
| |
| ### How does it work ? |
| While stringifying, all Objects, including Arrays, and strings, are flattened out and replaced as unique index. `*` |
| |
| Once parsed, all indexes will be replaced through the flattened collection. |
| |
| <sup><sub>`*` represented as string to avoid conflicts with numbers</sub></sup> |
| |
| ```js |
| // logic example |
| var a = [{one: 1}, {two: '2'}]; |
| a[0].a = a; |
| // a is the main object, will be at index '0' |
| // {one: 1} is the second object, index '1' |
| // {two: '2'} the third, in '2', and it has a string |
| // which will be found at index '3' |
| |
| Flatted.stringify(a); |
| // [["1","2"],{"one":1,"a":"0"},{"two":"3"},"2"] |
| // a[one,two] {one: 1, a} {two: '2'} '2' |
| ``` |