我想知道是否可以在JS中读取本地损坏的JSON文件?我对创建的本地json文件没有任何控制权。我试图找出是否可以在多余的逗号之前阅读所有行。
从“ ./users.json”导入用户
[
{
"name": "Rob"
},
{
"name": "Chris"
},
{
"name": "Daniel"
},
]
答案 0 :(得分:2)
您需要添加一些正则表达式替换逻辑来删除非法字符。这只是一个基本示例。
var json = `[
{
"name": "Rob"
},
{
"name": "Chris"
},
{
"name": "Daniel"
},
]`
var parsedJson = JSON.parse(json.replace(/\},\s*\]/g, '}]'))
console.log(parsedJson)
.as-console-wrapper { top: 0; max-height: 100% !important; }
答案 1 :(得分:0)
您必须编写某种JSON解析器,在其中必须逐字符读取以解析文件;
var readable = fs.createReadStream("jsonfile.json", {
encoding: 'utf8',
fd: null,
});
readable.on('readable', function() {
var chunk;
while (null !== (chunk = readable.read(1))) {
//chunk is one character
if(chunk == "["){ //JSON array is started }
if(chunk == "{"){ //Handle JSON object started}
//In between you can parse each character until you get a `:` character to
//identify the key and from there up to a comma it is value. (** Considering the simple JSON file example you provided**)
if(chunk == "}"){ //Handle JSON object end}
if(chunk == "]"){ //Handle JSON array end}
}
});
但是我建议您为此使用某种库。否则它将本身是一个单独的项目。无论如何,对于您示例的JSON类型,您都可以自己编写,因为格式非常简单,并且知道可能是问题所在(逗号)。
一般化解决方案会困难得多。