203 lines
7.3 KiB
Markdown
203 lines
7.3 KiB
Markdown
grunt-jsonlint [](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/
|