>백엔드 개발 >C++ >JSON.NET을 사용하여 JSON 개체 스트림을 구문 분석하는 방법은 무엇입니까?

JSON.NET을 사용하여 JSON 개체 스트림을 구문 분석하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-09 21:31:47380검색

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

JSON.NET을 사용하여 JSON 개체 스트림 구문 분석

JSON.NET은 JSON 개체의 연결된 스트림을 역직렬화하는 편리한 솔루션을 제공합니다. 이를 달성하려면 각 역직렬화 후에 판독기를 어떻게 발전시킬 것인지에 대한 문제가 발생할 수 있습니다.

제공하신 코드 조각은 JSON 개체 스트림을 역직렬화하려고 시도하지만 예상치 못한 토큰 오류로 인해 실패합니다. 이 문제를 해결하려면 다음과 같이 코드를 수정하세요.

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

이 수정된 코드에서는 스트림에서 각 JSON 개체를 읽은 다음 역직렬화된 결과를 생성하도록 루프가 조정되었습니다. 객체 처리 오류를 방지하려면 제공된 스트림이 열려 있는 동안 반환된 IEnumerable<TResult>을 반복하는 것이 중요합니다. 또한 무한 루프를 방지하기 위해 !jsonReader.EOF 검사가 추가되었고, 유효하지 않은 JSON 개체가 발생하는 등의 잠재적인 try-catch을 처리하기 위해 JsonReaderException 블록이 추가되었습니다.

예는 다음과 같습니다.

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

JsonReader를 사용하여 여러 JSON 조각을 처리하는 방법에 대한 자세한 내용은 공식 JSON.NET 설명서를 참조하세요.

위 내용은 JSON.NET을 사용하여 JSON 개체 스트림을 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.