Maison >développement back-end >C++ >Comment puis-je analyser efficacement des fichiers JSON volumineux et non standard dans .NET ?

Comment puis-je analyser efficacement des fichiers JSON volumineux et non standard dans .NET ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-06 04:23:47466parcourir

How Can I Efficiently Parse Large, Non-Standard JSON Files in .NET?

Analyse de gros fichiers JSON dans .NET

Lorsque vous traitez des fichiers JSON de taille importante, il n'est pas rare de rencontrer des défis en utilisant la méthode standard JsonConvert.Deserialize. Cet article abordera ce problème en examinant une solution unique proposée par Json.NET.

Problèmes de mémoire

Comme indiqué dans la question d'origine, la méthode de désérialisation par défaut peut entraîner des exceptions de mémoire lors de la gestion gros fichiers JSON. Cela est souvent dû à la nature en mémoire du processus de désérialisation, qui peut devenir problématique pour des ensembles de données volumineux.

Format JSON invalide

Dans le scénario spécifique décrit dans la question, un une complication survient. Le fichier JSON contenait plusieurs tableaux séparés par une syntaxe non valide, le rendant non conforme à la norme JSON. Ce format invalide posait des problèmes pour la désérialisation automatique de Json.NET.

Solution : JsonTextReader

Pour surmonter ces défis, Json.NET propose une solution spécialisée : le JsonTextReader. En utilisant directement un JsonTextReader pour lire le fichier JSON, nous pouvons définir l'indicateur SupportMultipleContent sur true. Cet indicateur permet au lecteur de gérer les formats JSON non standard contenant plusieurs tableaux.

Approche de streaming

Au lieu de tenter de désérialiser l'intégralité du fichier en une seule fois, nous adoptons une approche de streaming. À l'aide d'une boucle, nous pouvons désérialiser chaque élément individuel dans le fichier JSON, ce qui nous permet de traiter les données de manière efficace en termes de mémoire.

Exemple

L'extrait de code ci-dessous illustre cette approche de streaming :

using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead(stringUrl))
using (StreamReader streamReader = new StreamReader(stream))
using (JsonTextReader reader = new JsonTextReader(streamReader))
{
    reader.SupportMultipleContent = true;

    var serializer = new JsonSerializer();
    while (reader.Read())
    {
        if (reader.TokenType == JsonToken.StartObject)
        {
            Contact c = serializer.Deserialize<Contact>(reader);
            Console.WriteLine(c.FirstName + " " + c.LastName);
        }
    }
}

Conclusion

En utilisant JsonTextReader avec l'indicateur SupportMultipleContent défini, nous pouvons analyser efficacement les gros fichiers JSON, même face à une syntaxe non standard. Cette approche garantit à la fois l'efficacité de la mémoire et l'intégrité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn