解析不正确JSON字符串

问题描述:

我JSON输入,其中包含这样解析不正确JSON字符串

[13806008,,[[27017723,,[0.25,-180,145],],[26683222,,[0,-125,106],]],0,"0","0","0","0",null,[[176,"673041"],[168,"2"],[175,"val"],[169,"1"]]] 

的Chrome Web检查数组分析这些双逗号一样不确定的因素,但Newtonsoft JSON库投用这种格式异常。

我看到的唯一方法 - 先在双逗号之间插入null,然后再解析字符串。

有没有更快的方法来解析这样的JSON字符串?

+0

可能重复的[如果忽略类中的属性,如果null,使用json.net](http://*.com/questions/6507889/how-to-ignore-a-property-in- class-if-null-using-json-net) – techspider

+2

'我对输入有JSON - >恐怕你没有字符串JSON作为输入。 JSON具有非常严格的架构。你有什么是不符合任何有效的JSON模式的字符串。因此,如果您将这种无效字符串作为输入引发,那么标准JSON序列化程序会发出抱怨,这很正常。如果你有一些不符合任何规范或RFC的随机字符串,你可能需要编写自定义代码来解析它,这取决于它的语法。如果您没有有效的JSON输入,只需忘记使用像Newtonsoft.JSON库这样的JSON序列化程序。 –

仔细看看我的字符串,我意识到那是常规的JSON数组! 我只是解析我的蜇作为JSON数组!

JArray JsonArray= JArray.Parse(responseString); 

正如Darin Dimitrov在评论中所说,这不是JSON。因此,你需要弄清楚你想如何干预它。从这个例子看,它看起来像JSON的一个非常简单的“子集”,所以这就是我的建议。

我写了一个名为canto34库,它可以让你写你自己的口译像这样简单的语言问题,并说明程序以识别标记的嵌套列表 - 在我的情况,口齿不清s表达式,但这些都是非常类似于嵌套的JavaScript列表,只是使用不同的括号。 ;)

下面是解析嵌套列表所需的结构类型;

public class SExpressionParser : ParserBase 
{ 
    internal dynamic SExpression() 
    { 
     if (LA1.Is(SExpressionLexer.OP)) 
     { 
      Match(SExpressionLexer.OP); 
     } 
     else 
     { 
      var atom = Match(SExpressionLexer.ATOM).Content; 
      return atom; 
     }  

     var array = new List<dynamic>(); 
     while (!EOF && !LA1.Is(SExpressionLexer.CL)) 
     { 
      array.Add(SExpression()); 
     }  

     Match(SExpressionLexer.CL); 
     return array; 
    } 
}