JS加载损坏的JSON文件

时间:2018-06-25 15:53:10

标签: javascript json

我想知道是否可以在JS中读取本地损坏的JSON文件?我对创建的本地json文件没有任何控制权。我试图找出是否可以在多余的逗号之前阅读所有行。

从“ ./users.json”导入用户

[
  {
    "name": "Rob"
  },
  {
    "name": "Chris"
  },
  {
    "name": "Daniel"
  },
]

2 个答案:

答案 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类型,您都可以自己编写,因为格式非常简单,并且知道可能是问题所在(逗号)。

一般化解决方案会困难得多。