jav*_*der 9 javascript validation error-handling json node.js
这不是关于如何管理或纠正错误的JSON,而是关于如何向用户解释错误在JSON中的错误.
有没有办法找出解析器失败的JSON中的哪个位置.
我想在node.js应用程序中解决此问题,因此请尽可能在该域中保留您的答案.
当我使用内置的JSON对象和错误的JSON的parse方法时,我只得到异常消息SyntaxError: Unexpected string.我想找出错误发生的位置.
首选的JSON.validate(json)是返回结果ok/error和错误位置.像这样的东西:
var faultyJsonToParse = '{"string":"value", "boolean": true"}';
var result = JSON.validate(faultyJsonToParse);
if (result.ok == true) {
console.log('Good JSON, well done!');
} else {
console.log('The validator found a \'' + result.error + '\' of type \'' + result.errorType + '\' in your JSON near position ' + result.position);
}
Run Code Online (Sandbox Code Playgroud)
上述想要的结果将是:
The validator found a 'SyntaxError' of type 'Unexpected string' in your JSON near position 35.
Run Code Online (Sandbox Code Playgroud)
geo*_*org 13
试试jsonLint:
var faultyJsonToParse = '{"string":"value", "boolean": true"}';
try {
jsonlint.parse(faultyJsonToParse)
} catch(e) {
document.write('<pre>' + e)
}
Run Code Online (Sandbox Code Playgroud)
结果:
Error: Parse error on line 1:
...ue", "boolean": true"}
-----------------------^
Expecting 'EOF', '}', ',', ']', got 'undefined'
Run Code Online (Sandbox Code Playgroud)
(虽然jsonLint是一个节点项目,它也可以在web中使用:只需抓取https://github.com/zaach/jsonlint/blob/master/web/jsonlint.js)
正如@ eh9所建议的那样,在标准json解析器周围创建一个包装器以提供详细的异常信息是有意义的:
JSON._parse = JSON.parse
JSON.parse = function (json) {
try {
return JSON._parse(json)
} catch(e) {
jsonlint.parse(json)
}
}
JSON.parse(someJson) // either a valid object, or an meaningful exception
Run Code Online (Sandbox Code Playgroud)