>백엔드 개발 >C++ >여러 배열이 포함된 대용량 비표준 JSON 파일을 효율적으로 구문 분석하려면 어떻게 해야 합니까?

여러 배열이 포함된 대용량 비표준 JSON 파일을 효율적으로 구문 분석하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-06 00:58:37472검색

How Can I Parse Large, Non-Standard JSON Files with Multiple Arrays Efficiently?

불완전한 JSON 처리

대용량 JSON 파일을 구문 분석할 때 데이터 구조의 잠재적인 불일치를 고려하는 것이 중요합니다. 웹 서비스는 표준 형식을 완전히 따르지 않는 JSON 응답을 반환하는 경우가 많습니다. 일반적인 문제 중 하나는 단일 JSON 파일 내에 여러 배열 구조가 있다는 것입니다.

문제: 비표준 JSON 구조

특정 시나리오에서 JSON 데이터에 개별 항목이 포함된 경우 이 문제가 발생했습니다. 닫는 괄호와 여는 괄호로 구분된 배열입니다. 이러한 불규칙한 형식으로 인해 JsonConvert.DeserializeObject와 같은 기존 방법을 사용하여 전체 JSON을 단일 배열로 역직렬화하는 것이 불가능했습니다.

해결책: 다중 콘텐츠를 지원하는 스트림 기반 구문 분석

이 문제를 해결하려면 , Json.NET에서 스트림 기반 구문 분석의 유연성을 활용할 수 있습니다. JsonTextReader를 생성하고 SupportMultipleContent 속성을 true로 설정하면 리더가 JSON을 여러 개의 개별 콘텐츠 블록으로 처리할 수 있습니다.

다음은 이 접근 방식을 보여주는 수정된 코드 조각입니다.

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);
        }
    }
}

이 방법은 스트림별로 JSON 콘텐츠 스트림을 읽고 각 개체를 별도의 엔터티로 구문 분석합니다. 여는 중괄호를 발견하면 단일 연락처 개체를 연락처 컨테이너 클래스로 역직렬화하고 연락처 정보를 인쇄합니다.

이 접근 방식의 장점은 전체 파일을 한 번에. 이는 사용 가능한 메모리 용량을 초과하는 대용량 JSON 파일에 특히 유용합니다.

여러 콘텐츠를 지원하는 스트림 기반 구문 분석을 활용하면 불규칙한 JSON 구조를 효과적으로 처리하고 크기에 관계없이 데이터를 효율적으로 구문 분석할 수 있습니다. 또는 복잡성.

위 내용은 여러 배열이 포함된 대용량 비표준 JSON 파일을 효율적으로 구문 분석하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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