# Read JSON
> Read a file as [JSON][json].
## Usage
```javascript
var readJSON = require( '@stdlib/fs/read-json' );
```
#### readJSON( file\[, options], clbk )
Asynchronously reads a file as [JSON][json].
```javascript
var join = require( 'path' ).join;
readJSON( join( __dirname, 'package.json' ), onJSON );
function onJSON( error, data ) {
if ( error ) {
throw error;
}
console.dir( data );
}
```
The function accepts the following `options`:
- **encoding**: file encoding.
- **flag**: file status flag.
- **reviver**: [JSON][json] transformation `function`.
The `options` parameter may also be a `string` specifying the file `encoding`.
```javascript
var join = require( 'path' ).join;
readJSON( join( __dirname, 'package.json' ), 'utf8', onJSON );
function onJSON( error, data ) {
if ( error ) {
throw error;
}
console.dir( data );
}
```
#### readJSON.sync( file\[, options] )
Synchronously reads a file as [JSON][json].
```javascript
var join = require( 'path' ).join;
var instanceOf = require( '@stdlib/assert/instance-of' );
var out = readJSON.sync( join( __dirname, 'package.json' ) );
if ( instanceOf( out, Error ) ) {
throw out;
}
console.dir( out );
```
The function accepts the same `options` as [`readJSON()`](#read-json) above.
## Notes
- If the `encoding` option is set to `utf8` and the file has a UTF-8 [byte order mark][bom] (BOM), the byte order mark is **removed** before attempting to parse as [JSON][json].
## Examples
```javascript
var join = require( 'path' ).join;
var readJSON = require( '@stdlib/fs/read-json' );
var file = join( __dirname, 'package.json' );
// Synchronously read file contents...
var data = readJSON.sync( file, 'utf8' );
// returns
[json]: http://www.json.org/
[bom]: https://en.wikipedia.org/wiki/Byte_order_mark