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.
		
		
		
		
			
				
					120 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					120 lines
				
				2.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# parse-json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								> Parse JSON with more helpful errors
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Install
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ npm install parse-json
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const parseJson = require('parse-json');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const json = '{\n\t"foo": true,\n}';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								JSON.parse(json);
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								undefined:3
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								^
							 | 
						||
| 
								 | 
							
								SyntaxError: Unexpected token }
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								parseJson(json);
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								JSONError: Unexpected token } in JSON at position 16 while parsing near '{      "foo": true,}'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  1 | {
							 | 
						||
| 
								 | 
							
								  2 |   "foo": true,
							 | 
						||
| 
								 | 
							
								> 3 | }
							 | 
						||
| 
								 | 
							
								    | ^
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								parseJson(json, 'foo.json');
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								JSONError: Unexpected token } in JSON at position 16 while parsing near '{      "foo": true,}' in foo.json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  1 | {
							 | 
						||
| 
								 | 
							
								  2 |   "foo": true,
							 | 
						||
| 
								 | 
							
								> 3 | }
							 | 
						||
| 
								 | 
							
								    | ^
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// You can also add the filename at a later point
							 | 
						||
| 
								 | 
							
								try {
							 | 
						||
| 
								 | 
							
									parseJson(json);
							 | 
						||
| 
								 | 
							
								} catch (error) {
							 | 
						||
| 
								 | 
							
									if (error instanceof parseJson.JSONError) {
							 | 
						||
| 
								 | 
							
										error.fileName = 'foo.json';
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									throw error;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								JSONError: Unexpected token } in JSON at position 16 while parsing near '{      "foo": true,}' in foo.json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  1 | {
							 | 
						||
| 
								 | 
							
								  2 |   "foo": true,
							 | 
						||
| 
								 | 
							
								> 3 | }
							 | 
						||
| 
								 | 
							
								    | ^
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### parseJson(string, reviver?, filename?)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Throws a `JSONError` when there is a parsing error.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### string
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `string`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### reviver
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `Function`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter
							 | 
						||
| 
								 | 
							
								) for more.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### filename
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `string`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Filename displayed in the error message.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### parseJson.JSONError
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Exposed for `instanceof` checking.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### fileName
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `string`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The filename displayed in the error message.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### codeFrame
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `string`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The printable section of the JSON which produces the error.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<div align="center">
							 | 
						||
| 
								 | 
							
									<b>
							 | 
						||
| 
								 | 
							
										<a href="https://tidelift.com/subscription/pkg/npm-parse-json?utm_source=npm-parse-json&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
							 | 
						||
| 
								 | 
							
									</b>
							 | 
						||
| 
								 | 
							
									<br>
							 | 
						||
| 
								 | 
							
									<sub>
							 | 
						||
| 
								 | 
							
										Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
							 | 
						||
| 
								 | 
							
									</sub>
							 | 
						||
| 
								 | 
							
								</div>
							 |