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
				
				1.2 KiB
			
		
		
			
		
	
	
					53 lines
				
				1.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# json-stringify-safe
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Like JSON.stringify, but doesn't throw on circular references.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Takes the same arguments as `JSON.stringify`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var stringify = require('json-stringify-safe');
							 | 
						||
| 
								 | 
							
								var circularObj = {};
							 | 
						||
| 
								 | 
							
								circularObj.circularRef = circularObj;
							 | 
						||
| 
								 | 
							
								circularObj.list = [ circularObj, circularObj ];
							 | 
						||
| 
								 | 
							
								console.log(stringify(circularObj, null, 2));
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Output:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```json
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  "circularRef": "[Circular]",
							 | 
						||
| 
								 | 
							
								  "list": [
							 | 
						||
| 
								 | 
							
								    "[Circular]",
							 | 
						||
| 
								 | 
							
								    "[Circular]"
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Details
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								stringify(obj, serializer, indent, decycler)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The first three arguments are the same as to JSON.stringify.  The last
							 | 
						||
| 
								 | 
							
								is an argument that's only used when the object has been seen already.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The default `decycler` function returns the string `'[Circular]'`.
							 | 
						||
| 
								 | 
							
								If, for example, you pass in `function(k,v){}` (return nothing) then it
							 | 
						||
| 
								 | 
							
								will prune cycles.  If you pass in `function(k,v){ return {foo: 'bar'}}`,
							 | 
						||
| 
								 | 
							
								then cyclical objects will always be represented as `{"foo":"bar"}` in
							 | 
						||
| 
								 | 
							
								the result.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								stringify.getSerialize(serializer, decycler)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns a serializer that can be used elsewhere.  This is the actual
							 | 
						||
| 
								 | 
							
								function that's passed to JSON.stringify.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Note** that the function returned from `getSerialize` is stateful for now, so
							 | 
						||
| 
								 | 
							
								do **not** use it more than once.
							 |