grunt-jsonlint [![Build Status](https://travis-ci.org/brandonramirez/grunt-jsonlint.svg)](https://travis-ci.org/brandonramirez/grunt-jsonlint) ============== Validate [JSON]/[JSON5] files from [Grunt]. Requires Grunt 1.0+ and node 6.0+. # Install npm install grunt-jsonlint --save-dev # Configure Add the following (multi-)task to your Gruntfile: jsonlint: { sample: { src: [ 'some/valid.json' ], options: { formatter: 'prose' } } } Add the following to load the task into your Gruntfile: grunt.loadNpmTasks('grunt-jsonlint'); An error will be thrown if the JSON file contains syntax errors. To prefer an error format compatible with Visual Studio, change the formatter to 'msbuild'. Here's a simple [tutorial](http://grunt-tasks.com/grunt-jsonlint/ "grunt") on how to use grunt-jsonlint # Customizing There are a couple of options, which can support non-standard JSON syntax, usually used in configuration files for convenience: jsonlint: { all: { src: [ 'some/settings.json' ], options: { ignoreComments: true, ignoreTrailingCommas: true, allowSingleQuotedStrings: true, allowDuplicateObjectKeys: false, mode: 'json5' } } } * `ignoreComments`, when true JavaScript-style single-line and multiple-line comments will be recognised and ignored during parsing * `ignoreTrailingCommas`, when true trailing commas in objects and arrays will be ignored during parsing * `allowSingleQuotedStrings`, when true single quotes will be accepted as alternative delimiters for strings * `allowDuplicateObjectKeys`, when false, duplicate object keys will be reported as an error * `mode`, when set to "json", "cjson" or "json5", enables multiple flags according to the referred input type | Mode | Enabled Options | | ------- | ----------------- | | "json" | (none) | | "cjson" | `ignoreComments` | | "json5" | `ignoreComments`, `ignoreTrailingCommas`, `allowSingleQuotedStrings` and other JSON5 specifics | # Formatting Add the following (multi-)task to your `Gruntfile`: jsonlint: { all: { src: [ 'some/valid.json' ], options: { format: true, prettyPrint: false, indent: 2, sortKeys: false, pruneComments: false, stripObjectKeys: false, enforceDoubleQuotes: false, enforceSingleQuotes: false, trimTrailingCommas: false } } } * `format`, when `true` `JSON.stringify` will be used to format the JavaScript (if it is valid) * `prettyPrint`, when `true` `JSON.stringify` will be used to format the JavaScript (if it is valid) * `indent`, the value passed to `JSON.stringify`, it can be the number of spaces, or string like "\t" * `sortKeys`, when `true` keys of objects in the output JSON will be sorted alphabetically (`format` has to be set to `true`) * `pruneComments`, when `true` comments will be omitted from the prettified output (CJSON feature, `prettyPrint` has to be set to `true`) * `stripObjectKeys`, when `true` quotes surrounding object keys will be stripped if the key is a JavaScript identifier name (JSON5 feature, `prettyPrint` has to be set to `true`) * `enforceDoubleQuotes`, when `true` string literals will be consistently surrounded by double quotes (JSON5 feature, `prettyPrint` has to be set to `true`) * `enforceSingleQuotes`, when `true` string literals will be consistently surrounded by single quotes (JSON5 feature, `prettyPrint` has to be set to `true`) * `trimTrailingCommas`, when `true` trailing commas after all array items and object entries will be omitted (JSON5 feature, `prettyPrint` has to be set to `true`) # Schema Validation You can validate JSON files using [JSON Schema] drafts 04, 06 or 07: jsonlint: { all: { src: [ 'some/manifest.json' ], options: { schema: { src: 'some/manifest-schema.json', environment: 'json-schema-draft-04' } } } } * `schema`, when `src` set to a file path, the file will be used as a source of the JSON Schema to validate the JSON files in addition to the syntax checks * `environment`, can specify the version of the JSON Schema draft to use for validation: "json-schema-draft-04", "json-schema-draft-06" or "json-schema-draft-07" (if not set, the schema draft version will be inferred automatically) # Reporting There are a few options available for reporting errors: ## Error message format The standard error message format (`prose`) is optimized for human reading and looks like: >> File "test/invalid.json" failed JSON validation at line 10, column 9. This is customizable to conform to the Visual Studio style by specifying the `formatter` option as `msbuild`, like: jsonlint: { visualStudioExample: { src: [ 'test/invalid.json' ], options: { formatter: 'msbuild' } } } The output will look like: >> test/invalid.json(10,9): error: failed JSON validation ## Error reporting By default, the raw error from the underlying `jsonlint` library comes through to the grunt output. It looks like: ... "2" "3", ], ... ----------------------^ Unexpected string To customize this, change the `reporter` option to `jshint` (the format is inspired by how `jshint` formats their output, hence the name): jsonlint: { jshintStyle: { src: [ 'test/invalid.json' ], options: { reporter: 'jshint' } } } The output will look like: 10 | ..." "3", ... ^ Unexpected string The default reporter is called `exception` since it simply relays the raw exception message. # Running tests Unit tests are provided for automated regression testing. The easiest way to run them is with $ npm install $ npm test Alternatively, if you have `grunt-cli` installed, you could use grunt directly with $ npm install $ grunt test Which does the same thing. # Release History * 2013-02-20 v1.0.0 First official release * 2013-09-19 v1.0.1 Do not log every validated file * 2013-10-31 v1.0.2 Add output of count of successfully linted JSON file for issue * 2013-11-16 v1.0.3 Fix output of count of successfully linted JSON files. * 2013-11-18 v1.0.4 Updated for latest dependencies. * 2015-10-11 v1.0.5 Updated for latest dependencies. * 2015-10-29 v1.0.6 CJSON support thanks to @fredghosn, unit tests * 2015-12-23 v1.0.7 Include file name and JSON source line number in error messages * 2016-05-27 v1.0.8 Option to format JSON file thanks to @robblue2x * 2016-06-11 v1.1.0 Enhanced error reporting for better human reading and Visual Studio integration. * 2019-06-14 v2.0.0 Schema validation, sorting keys, single quotes thanks to @prantlf, dependency upgrades, drop support for node 4.x. * 2020-01-01 v2.1.0 Implement `ignoreTrailingCommas`, `allowDuplicateObjectKeys`, `enforceDoubleQuotes`, `enforceSingleQuotes`, and `trimTrailingCommas` options, dependency upgrades, improved error reporting. * 2020-01-01 v2.1.1 Include license file in published npm package. * 2020-03-15 v2.1.2 Update external dependency for security. [JSON]: https://tools.ietf.org/html/rfc8259 [JSON5]: https://spec.json5.org [JSON Schema]: https://json-schema.org [Grunt]: https://gruntjs.com/