2016-04-28 20 views
0

Ich habe JSON auf Eingabe, die Arrays wie dieseParsing falsche JSON-Strings

[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 Inspector enthalten parst solche Doppel Kommas wie undefinierte Elemente, aber die Newtonsoft Json Bibliothek löst eine Ausnahme bei diesem Format.

Die einzige Möglichkeit, die ich sehe - NULL zwischen Doppel Kommas zuerst und Parse String dann einfügen.

Gibt es eine schnellere Möglichkeit, solche JSON-Strings zu parsen?

+0

Mögliches Duplikat von [Wie eine Eigenschaft in der Klasse zu ignorieren, wenn null, mit json.net] (http://stackoverflow.com/questions/6507889/how-to-ignore-a-property-in- class-if-null-using-json-net) – techspider

+2

'Ich habe JSON am Eingang' -> Ich habe Angst, dass Sie keine Zeichenfolge JSON als Eingabe haben. JSON hat ein ziemlich strenges Schema. Was Sie haben, ist eine Zeichenkette, die keinem gültigen JSON-Schema entspricht. Es ist also normal, dass ein Standard-JSON-Serializer sich beschweren wird, wenn Sie eine ungültige Zeichenfolge als Eingabe ausgeben. Wenn Sie eine zufällige Zeichenfolge haben, die keiner Spezifikation oder RFC entspricht, müssen Sie möglicherweise benutzerdefinierten Code schreiben, um abhängig von seiner Grammatik zu analysieren. Vergessen Sie einfach, einen JSON-Serializer wie die Newtonsoft.JSON-Bibliothek zu verwenden, wenn Sie keine gültige JSON-Eingabe haben. –

Antwort

0

Wenn ich meine Saite genau ansehe, habe ich gemerkt, dass es sich um ein normales JSON-Array handelt! Ich analysiere einfach meinen Stich als JSON Array!

JArray JsonArray= JArray.Parse(responseString); 
0

Wie Darin Dimitrov in einem Kommentar sagt, ist dies nicht JSON. Also liegt es an dir herauszufinden, wie du es interpettieren willst. Aus dem Beispiel sieht es wie eine ziemlich einfache "Teilmenge" von JSON aus, also hier ist, was ich vorschlagen würde.

Ich habe eine Bibliothek mit dem Namen canto34 geschrieben, mit der Sie Ihre eigenen Interpreter für einfache Sprachprobleme wie diese schreiben können, und ein Programm zum Erkennen verschachtelter Listen von Token beschrieben - in meinem Fall lisp s-Ausdrücke, aber diese sind sehr ähnlich zu verschachtelten JavaScript-Listen, nur mit verschiedenen Klammern. ;)

Hier ist die Art von Struktur, die Sie verschachtelte Listen analysieren müssen;

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