我正在寻找一种在解析无效的JSON(文本)时获取更详细的错误消息的方法
我的JSON文件不使用双引号引起来的属性名称,并且可能包含表达式和模板文字
答案 0 :(得分:-1)
在研究了多个解析器之后,我发现最简单的方法是将JSON保存到文件中,并“要求”它。
当然,当我解析在HTTP终结点上接收到的JSON时,我不会使用它,但是当您正在读取JSON文件,配置,JSON模式等时,它会很好用...
const fs = require('fs-extra')
const path = require('path')
const displayJSONError = source => {
const filePath = path.resolve('displayJSONError_tmp.js')
fs.writeFileSync(filePath, `const c = ${source}`)
try {
require(filePath)
} catch (error) {
let lineNumber = 1
console.error(`error:${error.message}\nline: ${error.stack.split(`${filePath}:`).pop().split('SyntaxError:')[0]}\n${source.split('\n').map(line => `${lineNumber++} ${line}`).join('\n')}`)
}
fs.unlinkSync(filePath)
}
try {
JSON.parse(aString)
} catch (error) {
displayJSONError(aString)
}
此代码显示带有行号的错误JSON,突出显示错误的位置并显示行号