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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							53 lines
						
					
					
						
							2.2 KiB
						
					
					
				| # 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'
 | |
| ```
 |