2016-04-28 97 views
0

我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://stackoverflow.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序列化程序。 –

回答

0

仔細看看我的字符串,我意識到那是常規的JSON數組! 我只是解析我的蜇作爲JSON數組!

JArray JsonArray= JArray.Parse(responseString); 
0

正如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; 
    } 
}