Javascript 将JSON.parse与Node.js一起使用时获取更详细的错误消息

Javascript 将JSON.parse与Node.js一起使用时获取更详细的错误消息,javascript,json,node.js,Javascript,Json,Node.js,我正在寻找一种在解析无效JSON(文本)时获取更详细错误消息的方法 我的JSON文件不使用双引号属性名,可能包含表达式和模板文本在研究了几个解析器之后,我发现最简单的方法是将JSON保存到文件中,并“需要”它 当然,在解析HTTP端点上接收到的JSON时,我不会使用它,但当您阅读JSON文件、配置、JSON模式等时,它非常有用 const fs = require('fs-extra') const path = require('path') const displayJSONError =

我正在寻找一种在解析无效JSON(文本)时获取更详细错误消息的方法


我的JSON文件不使用双引号属性名,可能包含表达式和模板文本

在研究了几个解析器之后,我发现最简单的方法是将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,突出显示错误的位置并显示行号

这不会在
JSON
中显示语法错误,但在
JS
中,如果您的文件有。。。。。。很多JSON验证器都会抛出错误消息。