대용량 JSON 파일을 위한 JSON.NET 스트리밍
동일한 객체가 많이 포함된 매우 큰 JSON 파일을 처리할 때는 메모리 과부하 없이 효율적인 구문 분석이 중요합니다. 한 가지 접근 방식은 파일을 스트림으로 구문 분석하여 한 번에 하나의 개체를 읽고 처리하는 것입니다.
직렬 역직렬화의 어려움
처음에는 JsonSerializer.Deserialize<myobject>(reader)
을 사용하여 개체를 직접 역직렬화하려고 시도하면 JSON 파일에 단일 개체가 아닌 개체 목록이 포함되어 있기 때문에 실패합니다. 개체를 목록으로 역직렬화하면 문제가 해결되지만 목록에 역직렬화된 모든 개체가 유지되므로 과도한 RAM 사용량이 발생합니다.
스트림 기반 방법
이러한 문제를 해결하기 위한 보다 효율적인 접근 방식은 파일을 스트림으로 구문 분석하여 각 객체를 하나씩 읽는 것입니다. 다음 C# 코드는 이 접근 방식을 보여줍니다.
<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>
이 솔루션에서 스트림은 판독기가 객체의 시작을 나타내는 여는 중괄호 "{"를 만날 때까지 한 문자씩 앞으로 나아갑니다. 그런 다음 Deserialize
메서드를 사용하여 개체를 역직렬화합니다. 객체가 처리되면 RAM에서 삭제되므로 전체 파일을 메모리에 유지하지 않고도 다음 객체를 읽을 수 있습니다.
스트림 파싱 기반 장점
이 흐름 기반 접근 방식에는 상당한 장점이 있습니다.
결론
RAM에 과부하를 주지 않고 개별 개체를 효율적으로 처리하는 기능을 사용하여 대용량 JSON 파일을 Json.NET의 스트림으로 구문 분석합니다. 이 접근 방식은 메모리 사용량이 제한될 때 특히 유용합니다.
위 내용은 Json.NET에서 대용량 JSON 파일을 스트림으로 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!