When integrating Large Language Models (LLMs) into real-time applications, streaming structured JSON responses can be tricky. LLMs generate content progressively, meaning responses are streamed in chunks. However, this often results in incomplete or malformed JSON, making it difficult to parse and use the data reliably.

I faced this challenge while building a real-time chatbot API that returned structured responses, such as:

  • A suggested response for the user.
  • A list of recommended actions based on the conversation context.

However, since JSON arrived in fragments, parsing failed until the entire response was complete. To solve this, I implemented a solution in C# that streams data safely, repairs malformed JSON, and ensures clients receive a fully correct response.

The Problem: Handling Malformed JSON in Streaming Data

Imagine you’re building a real-time chatbot for customer support. The bot generates responses in JSON format and streams them as they become available.

However, due to network latency and chunked responses, the JSON often arrives incomplete, like this:

{
    "suggested_response": "Hello! How can I assi

and

{
    "suggested_response": "Hello! How can I assist you today?",
    "recommended_actions": [

This is not valid JSON, and if we attempt to deserialize it immediately, it will result in an error.

Key Challenges

  1. Handling Incomplete JSON
    • Since LLMs stream responses in small pieces, we must process the JSON incrementally without breaking the parser.
  2. Fixing Malformed JSON in Real-Time
    • As JSON arrives in fragments, we need a way to repair it dynamically before attempting to parse it.
  3. Preserving Data Integrity
    • Some JSON repair libraries alter the content inside strings, which could modify key data.
    • Some content, such as LaTeX expressions or escape sequences, could be incorrectly modified by automated repair tools.
    • We must ensure that the final data matches what the LLM originally generated.
  4. Sending a Final Verified Response
    • Since streaming can be unreliable, we need a fallback mechanism to send a complete and corrected JSON object at the end.

The Solution: Using JSON Repair with a Fallback Mechanism

To solve these challenges, I implemented a streaming JSON repair system in C# using the JsonRepairSharp library. This system:

  • Streams JSON responses incrementally, allowing the client to get updates in real-time.
  • Repairs malformed JSON as new data arrives.
  • Prevents data corruption by extracting only the new content from each chunk.
  • Sends a final complete response at the end to ensure accuracy.
public async Task ProcessChatResponse(ChatRequest req, CancellationToken cancellation)
{
    Response.Headers.Add(HeaderNames.ContentType, "text/event-stream");
    Response.Headers.Add("Cache-Control", "no-cache");

    StringBuilder finalJson = new();
    string previousResponse = "";

    var responseStream = _ChatService.GetChatStream(req, cancellation);

    await foreach (var chunk in responseStream)
    {
        if (cancellation.IsCancellationRequested)
            break;

        finalJson.Append(chunk);

        // Attempt to repair JSON dynamically
        JsonRepairSharp.JsonRepair.Context = JsonRepairSharp.JsonRepair.InputType.LLM;
        string repairedJson = JsonRepairSharp.JsonRepair.RepairJson(finalJson.ToString());

        if (string.IsNullOrWhiteSpace(repairedJson))
            continue;

        var chatResponse = ChatResponseModel.Deserialize(repairedJson);
        if (chatResponse?.SuggestedResponse == null)
            continue;

        // Extract only the newly generated text to avoid duplication
        string newContent = ExtractNewContent(previousResponse, chatResponse.SuggestedResponse);

        if (!string.IsNullOrEmpty(newContent))
        {
            string jsonResponse = new PartialResponseDto { Type = "chat_update", Content = newContent }.GetJSON();
            await Response.WriteAsync($"data: {jsonResponse}\n\n", cancellation);
            await Response.Body.FlushAsync(cancellation);
        }

        previousResponse = chatResponse.SuggestedResponse;
    }

    // Send final complete JSON to ensure correctness
    string completeJson = CleanJsonString(finalJson.ToString());
    var finalChatResponse = ChatResponseModel.Deserialize(completeJson);

    if (finalChatResponse?.SuggestedResponse != null)
    {
        string jsonResponse = new PartialResponseDto { Type = "final_response", Content = finalChatResponse.SuggestedResponse }.GetJSON();
        await Response.WriteAsync($"data: {jsonResponse}\n\n", cancellation);
        await Response.Body.FlushAsync(cancellation);
    }

    // Signal completion
    await Response.WriteAsync("data: [DONE]\n\n", cancellation);
    await Response.Body.FlushAsync(cancellation);
}

To ensure structured JSON responses, I used a simple DTO class:

public class PartialResponseDto
{   
    /// <summary>
    /// Specifies the type of response, e.g., "chat_update" for intermediate updates or "final_response" for the complete response.
    /// </summary>
    public string Type { get; set; } = "";

    /// <summary>
    /// Contains the chatbot-generated content or message.
    /// </summary>
    public string Content { get; set; } = "";

    /// <summary>
    /// Converts the object to a JSON-formatted string.
    /// </summary>
    public string GetJSON()
    {
        return Newtonsoft.Json.JsonConvert.SerializeObject(this);
    }
}

How This Solution Works

1. Streaming JSON in Chunks

  • The API streams JSON responses incrementally instead of waiting for the full response.

2. Repairing Malformed JSON Dynamically

  • As new data arrives, JsonRepairSharp.JsonRepair.RepairJson() fixes incomplete JSON structures to make them parseable.

3. Extracting Only New Content

  • ExtractNewContent() ensures that only new text is streamed to the client, preventing redundant updates.

4. Sending a Final Verified Response

  • Once the LLM completes its response, a final, fully repaired JSON is sent to ensure correctness.

Key Benefits of This Approach

Real-time updates: Clients receive chatbot responses instantly without waiting.
Resilient JSON handling: The repair mechanism prevents parsing errors due to incomplete JSON.
Data integrity: The final JSON ensures the full response is correct and unaltered.
Improved user experience: Chatbots feel more responsive and interactive.

Conclusion

Streaming JSON from LLMs in C# comes with challenges, but by implementing incremental JSON repair and structured streaming, we can ensure that:

✔️ Data is delivered in real-time.
✔️ Incomplete JSON is handled gracefully.
✔️ Clients always receive a complete, valid response.

This solution has significantly improved how our chatbot API handles JSON streaming. If you’re working with real-time AI applications, I hope this guide helps you build robust and error-free JSON streaming systems!

Have you encountered JSON streaming issues in your projects? Share your thoughts in the comments!

67 Comments

  1. Найти хорошую электронику по разумной цене — задача, требующая внимания к деталям и репутации магазина. Здесь покупатели найдут регистраторы, GPS-маяки, фотоаппараты и множество полезных приборов для дома и автомобиля. Подробный каталог с описаниями и ценами представлен на сайте https://video-camer.ru/
    и доступен круглосуточно. Оперативная отправка заказов и помощь консультантов делают покупку простой и выгодной.

  2. Ценители кино и сериалов теперь могут забыть о долгих поисках свежих релизов. Актуальные новинки и золотая классика представлены в едином каталоге по честным ценам. Ищете купить коломбо сериал? Интернет-магазин serialexpress.ru предлагает огромный каталог отечественных и зарубежных сериалов с доставкой по всей России. Оформление покупки занимает считанные минуты, а доставка не заставит ждать. Отличное качество записи и надежная упаковка обеспечены каждому клиенту.

  3. Тульская автошкола «Драйв+» с 2006 года обучает вождению на категорию B и готовит учеников именно к реальной дороге, а не только к экзамену. Опытные инструкторы, светлые классы и онлайн-теория, гибкий график и полное сопровождение в ГАИ на своих машинах. Записаться на курс можно на сайте https://drivepluspro.ru/ — там же цены и акции. Доверьте обучение профессионалам «Драйв+».

  4. Установка гидроманипулятора на самосвал делает машину многофункциональной для подъёма, выгрузки и транспортировки грузов. Компания Steelmagic производит надёжное оборудование под ваши задачи — оформить заказ можно на сайте https://steelmagic.ru/gidromanipulyator-dlya-samosvala/ Качественная сборка, точное управление и долгий срок службы гарантированы.

  5. Городской воздух в комнате нередко кажется чистым, хотя в нём остаются пыль, пыльца и шерсть. Smartmi Air Purifier 2 тихо фильтрует поток, прост в управлении и уместен в спальне или гостиной. Обзор модели — на https://moskva-news.com/smartmi-air-purifier-2-chistyj-vozduh-kak-chast-domashnego-komforta/ : свободная установка и своевременная смена фильтра помогают держать дом свежим.

  6. Чистый воздух дома — не роскошь, а основа самочувствия. Пыль, аллергены и сухой воздух повышают риск простуд и раздражают слизистые, поэтому очистители с HEPA и увлажнители, держащие влажность около 40–60%, заметно облегчают дыхание. Подробнее о выборе и пользе читайте на https://igropoisk.com/ochistiteli-i-uvlazhniteli-vozduha-zabota-o-zdorove.html — там ясно, как техника помогает семье дышать свободнее каждый день.

  7. Екатеринбургская компания «Экспресс-связь» выпускает бытовки: прочные, функциональные, пригодные для использования на стройплощадках, загородных участках и производственных территориях. Бытовки произведены из прочного металла с антикоррозийной обработкой и утеплителем, специально рассчитаны для эксплуатации в уральском климате. Ищете бытовки екатеринбург? Все подробности о продукции и услугах — на express-svyaz.ru — производство бытовок под заказ с доставкой по региону и профессиональной комплектацией под любые задачи.

  8. В Туле автошкола «ДРАЙВ+» серьёзно и основательно готовит водителей категории B. Занятия ведут опытные инструкторы, а программа подстраивается под ваш темп и график. Ищетелучшая автошкола? Подробности и запись — на сайте drivepluspro.ru — теория, площадка и город без спешки. Учиться комфортно, без криков и лишнего стресса. Результат — права и реальный навык вождения.

  9. Питомник «Сакура» специализируется на выращивании плодовых саженцев, декоративных кустарников и хвойников с закрытой корневой системой. Каталог и условия доставки по России смотрите на сайте https://sakura-pitomnik.ru/ — там же подбор сортов под ваш регион. Саженцы адаптированы под климат региона, показатель приживаемости высокий, консультация агронома включена в заказ.

  10. tomorrowland thailand официальные билеты Рынок билетов на популярный фестиваль всегда привлекает мошенников. Статья «tomorrowland thailand официальные билеты» перечисляет признаки надёжного продавца. Рекомендую сохранить чек-лист перед покупкой.

  11. tomorrowland2026.ru не кидалово Проверка продавца занимает несколько минут и уберегает от потери денег. Здесь описана роль агента и его отдельная квота на билеты. Проверка по списку уберегает от сайтов-однодневок.

  12. tomorrowland vip tickets Разница между обычным пропуском и VIP не всегда очевидна на сайте организатора. Материал объясняет разницу между трёхдневным доступом и повышенной категорией. Рекомендую прочитать до оформления заказа.

  13. tomorrowland thailand tickets Каждый сезон часть гостей покупает билеты уже после sold out. Ответ на вопрос «tomorrowland thailand tickets» помогает продолжить поиск после sold out. Полезно сохранить ссылку до решения по билету.

  14. Производитель Waltzprof изготавливает и реализует профили из оцинкованной и нержавеющей стали для окон, дверей, фасадов и перегородок. Ищете профиль стальной оцинкованный? В каталоге на сайте waltzprof.com представлены фасадные системы и профиль с терморазрывом ВП372. Профили характеризуются выверенной геометрией, надежностью и износостойкостью. Покупателям доступны заводские цены, быстрая комплектация заказа и доставка по всей стране.

  15. Гардеробная система «Модерра» — готовое модульное решение для организации вещей. Гардеробная система хранения подбирается под ваши габариты и потребности: полки, штанги, ящики, вешалки напольные. Оформить заказ и посмотреть каталог можно на https://indrev.ru/mebel/ — гардеробную систему купить получится без переплат. Сборка простая, конфигурация меняется в любой момент.

  16. tomorrowland2026.ru не кидалово Проверка агента перед оплатой проще возврата денег после. Статья «tomorrowland2026.ru не кидалово» перечисляет признаки надёжного продавца. Отдельно разобран вопрос получения PDF после оплаты.

  17. Планируете отдых у моря? Сайт jus.su поможет подобрать тур мечты быстро и без хлопот. Здесь вы найдёте обширную базу актуальных предложений, обновляемых в реальном времени, а удобные фильтры по городу вылета, длительности отдыха и числу туристов ускорят поиск. Загляните на https://jus.su/ — пара кликов, и подходящий пакет уже у вас в руках. Надёжность туров гарантирована, а значит, вас ждут только положительные эмоции и комфортное путешествие от начала до конца.

  18. Школа-студия парикмахерского искусства — это ваш быстрый старт в востребованной профессии. Уже после короткой трёхдневной теории ученики приступают к практике на реальных клиентах. В программе — мужские, женские и детские стрижки, вечерние и свадебные укладки, плетение кос, химическая завивка и углублённая колористика с современными техниками окрашивания. Опытные практикующие мастера помогут освоить ремесло с нуля. Подробности, цены и индивидуальный расчёт — на сайте https://j-center.ru/ где стоит записаться на ближайший набор.

Leave a Reply

Your email address will not be published. Required fields are marked *