# flatted

A super light (0.5K) and fast circular JSON parser, directly from the creator of CircularJSON.

Usable via CDN or as regular module.

    // 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 parameter to `.parse(string, reviver)` and revive your own objects.
- Added a replacer 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.

`*` represented as string to avoid conflicts with numbers

    // 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'