Maison >développement back-end >C++ >Comment analyser un flux d'objets JSON à l'aide de JSON.NET ?

Comment analyser un flux d'objets JSON à l'aide de JSON.NET ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-09 21:31:47423parcourir

How to Parse a Stream of JSON Objects Using JSON.NET?

Analyser le flux d'objets JSON à l'aide de JSON.NET

JSON.NET fournit une solution pratique pour désérialiser un flux connecté d'objets JSON. En y parvenant, vous pourriez vous heurter au problème de savoir comment faire avancer le lecteur après chaque désérialisation.

L'extrait de code que vous avez fourni tente de désérialiser un flux d'objets JSON, mais échoue en raison d'une erreur de jeton inattendue. Pour résoudre ce problème, modifiez le code comme suit :

<code class="language-csharp">public IEnumerable<TResult> ReadJson<TResult>(Stream stream)
{
    var serializer = new JsonSerializer();

    using (var reader = new StreamReader(stream))
    using (var jsonReader = new JsonTextReader(reader))
    {
        jsonReader.SupportMultipleContent = true;

        while (jsonReader.Read() && !jsonReader.EOF) // 添加EOF检查
        {
            try
            {
                yield return serializer.Deserialize<TResult>(jsonReader);
            }
            catch (JsonReaderException ex)
            {
                // 处理JSON读取异常,例如跳过无效的JSON对象
                Console.WriteLine($"JSON解析错误: {ex.Message}");
                // 可选:在此处添加日志记录或其他错误处理机制
            }
        }
    }
}</code>

Dans ce code modifié, la boucle a été ajustée pour lire chaque objet JSON du flux puis produire le résultat désérialisé. Il est important de parcourir le IEnumerable<TResult> renvoyé pendant que le flux fourni est ouvert pour éviter les erreurs de suppression d'objet. De plus, une vérification !jsonReader.EOF a été ajoutée pour éviter les boucles infinies, et un bloc try-catch a été ajouté pour gérer les JsonReaderException potentiels tels que la rencontre d'un objet JSON non valide.

Voici un exemple :

<code class="language-csharp">using (var stream = /* some stream */)
{
    IEnumerable<MyClass> result = ReadJson<MyClass>(stream);

    foreach (var item in result)
    {
        Console.WriteLine(item.MyProperty);
    }
}</code>

Pour plus d'informations sur l'utilisation de JsonReader pour gérer plusieurs fragments JSON, veuillez vous référer à la documentation officielle de JSON.NET.

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