대용량 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!