2014-09-05 52 views
0

我需要使用JSON.parse()解析json字符串,但有时候输入不是完整格式。 for examle:JSON解析无效字符串的有效行

{ 
    "x" : "x", 
    "x1" : "x1", 
    "x2" : "x2, 
    "x3" : 

而解析正在突破。但在这种情况下,我想“保存”有效的行。

可能吗?

+1

您必须编写自己的解析器。 – 2014-09-05 18:04:40

+0

没有。除非你想编写你自己的解析器。 – 2014-09-05 18:04:41

+5

没有。 json在语法上是有效的,或者它不是json。你必须手动提取单个位,或者“修复”字符串,使其成为有效的json。 – 2014-09-05 18:04:46

回答

1

这里是你可以做什么:

String.prototype.safeParser = function(){ 
    try{ 
     var that=this; 
     return JSON.parse(this); 
    } 
    catch(err){ 
     if(this.length<3){ 
      return {}; 
     } 
     else if(this.charAt(this.length - 1) == "}"){ 
      that = this.substring(0, this.length - 2) + "}"; 
     } 
     else{ 
      that = this.substring(0, this.length - 1) + "}"; 
     } 
     return that.safeParser(); 
    } 
} 

,并使用它像console.log(json_string.safeParser());

它检查字符串是否是有效的JSON,如果它不是,它看起来如果它与大括号结束,它一次删除一个字符,直到它是有效的json。

注意:此特定的代码仅适用于具有大括号的对象,不适用于带有方括号的数组。但是,这可能不太难实施。

JS Fiddle Demo

(打开您的控制台)