2013-03-26 2 views
0

Je suis confronté à un problème où je n'ai pas pu trouver une bonne approche pour analyser une chaîne contenant plusieurs chaînes JSON, comme dans {content1}{content2}{content3}.Chaîne d'analyse qui contient plusieurs chaînes de données JSON

Quelle est une bonne approche pour analyser cette chaîne de sorte que le résultat serait:

{content1}{content2}{content3}

Peut-être quelque chose avec Regex?

+0

Je voudrais regarder dans JSON.NET pour l'analyse des chaînes JSON dans les objets. –

+0

Ce n'est pas le format JSON –

+0

@CuongLe Ceci est juste un exemple. La partie importante est les accolades, qui seraient utilisées pour que l'algorithme sache où un JSON commence et l'autre se termine. –

Répondre

2

Peut-être que vous pouvez utiliser string.Split:

var output = input.Split(new[] {'{', '}'}, StringSplitOptions.RemoveEmptyEntries) 
        .Select(x => "{" + x + "}") 
        .ToList(); 
+0

Par curiosité, et pour ceux qui tombent sur cette réponse, qu'est-ce que cela fait réellement? –

+0

@PeterHerdenborg: Le code a montré ce que fait réellement, je peux ajouter le lien pour plus de clarté –

0

Vous pouvez utiliser RegEx:

string input = "{content1}{content2}{content3}"; 
var matches = Regex.Match(input, "(?:({[^}]+}) *)*"); 
string[] contents = matches.Groups[1].Captures.Cast<Capture>().Select(c => c.Value).ToArray(); 
+0

Dans un cas comme '{foo: {bar: 'null'}} {...} {...}', wouldn Est-ce que votre regexp arrête de correspondre prématurément, c'est-à-dire au premier '}' qu'il rencontre? –

+0

Oui, ce serait le cas. Mais l'entrée d'échantillon ne montre aucun cas comme ça. – MarcinJuraszek

+0

Je pense que ce sont des espaces réservés plutôt que des exemples d'entrée si ... –

0

Si vous êtes sûr que chaque partie JSON est un objet littéral, je suppose que vous pouvez simplement diviser le chaîne sur }\s*{, car cela ne pourrait jamais se produire dans JSON valide.

Questions connexes