Files
taimed/node_modules/grunt-jsonlint/README.md
2025-07-24 17:21:45 +08:00

203 lines
7.3 KiB
Markdown

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/