这不是关于如何管理或更正错误的
JSON,它是关于如何向用户解释错误在错误的JSON中的错误.
有没有办法找出解析器失败的JSON中的哪个位置.
我想在一个node.js应用程序中解决这个问题,所以请尽可能的保留你的答案在该域.
当我使用内置的JSON对象和解析方法为一个有问题的JSON我只得到异常消息语法错误:意外的字符串.我想知道发生错误的地方.
首选将是返回结果ok / error和错误位置的JSON.validate(json).这样的东西
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); }
上述想要的结果是:
The validator found a 'SyntaxError' of type 'Unexpected string' in your JSON near position 35.
解决方法
尝试
jsonLint:
var faultyJsonToParse = '{"string":"value","boolean": true"}'; try { jsonlint.parse(faultyJsonToParse) } catch(e) { document.write('<pre>' + e) }
结果:
Error: Parse error on line 1: ...ue","boolean": true"} -----------------------^ Expecting 'EOF','}',',']',got 'undefined'
(虽然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