解析有错误的JSON并能够显示错误的位置

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)