대용량 JSON 파일의 효율적인 처리: Json.NET 스트리밍 역직렬화
메모리에 완전히 로드할 수 없는 대규모 JSON 데이터 세트를 처리할 때는 효율적인 구문 분석이 중요합니다. Json.NET은 JsonReader
을 통해 강력한 스트리밍 JSON 데이터 처리 솔루션을 제공합니다.
문제 개요
JSON 파일에는 일련의 동일한 개체가 포함되어 있으며, 목표는 전체 파일을 메모리에 로드하지 않고 한 번에 하나의 개체를 읽는 것입니다.
시도 실패
처음에 파일을 역직렬화하려고 하면 개체가 아닌 JSON 배열이 필요했기 때문에 예외가 발생했습니다. 배열을 목록으로 역직렬화하면 오류가 해결되었지만 메모리 소비가 높아졌습니다.
스트리밍 솔루션
이러한 제한 사항을 해결하기 위해 제안된 솔루션은 JSON 파일을 문자별로 읽고 판독기가 개체의 시작을 나타내는 "{" 문자를 발견할 때만 개체를 역직렬화합니다.
코드 예시
다음은 JsonReader
을 사용하여 JSON 파일을 스트리밍하는 데 최적화된 코드입니다.
<code class="language-csharp">JsonSerializer serializer = new JsonSerializer(); MyObject o; using (FileStream s = File.Open("bigfile.json", FileMode.Open)) using (StreamReader sr = new StreamReader(s)) using (JsonReader reader = new JsonTextReader(sr)) { while (reader.Read()) { // 仅当流中存在 "{" 字符时才反序列化 if (reader.TokenType == JsonToken.StartObject) { o = serializer.Deserialize<MyObject>(reader); // 对 o 对象进行处理 } } }</code>
이 코드는 RAM을 너무 많이 차지하지 않으면서 파일을 효율적으로 읽고 스트림에서 발견되는 개체를 역직렬화합니다. myobject
은 실제 개체 유형 MyObject
으로 바꿔야 합니다. 역직렬화 후 각 객체를 조작할 수 있도록 o
객체 처리 기능이 코드에 추가되었습니다.
위 내용은 Json.NET 스트림 JSON 역직렬화를 통해 대용량 파일을 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!