문제:
대량 JSON 파일을 구문 분석하면 다음과 같은 문제가 발생합니다. 그들의 큰 크기에. 이 기사의 목적은 Java의 GSON 라이브러리를 사용하여 이러한 파일을 효과적으로 구문 분석하기 위한 최적의 접근 방식을 결정하는 것입니다.
해결책:
Jackson API 활용
권장되는 접근 방식은 Jackson API를 활용하는 것입니다. 스트리밍 및 트리 모델 구문 분석 기능의 완벽한 조합을 제공하여 파일 전체를 탐색하고 개별 개체를 트리 구조로 읽어올 수 있습니다. 이를 통해 최소한의 메모리를 사용하면서 기가바이트 크기의 JSON 파일도 효율적으로 처리할 수 있습니다.
구현 예
다음 코드 조각은 Jackson의 스트리밍 및 트리 모델 구문 분석:
import org.codehaus.jackson.map.*; import org.codehaus.jackson.*; import java.io.File; public class ParseJsonSample { public static void main(String[] args) throws Exception { JsonFactory f = new MappingJsonFactory(); JsonParser jp = f.createJsonParser(new File(args[0])); JsonToken current; current = jp.nextToken(); if (current != JsonToken.START_OBJECT) { System.out.println("Error: root should be object: quiting."); return; } while (jp.nextToken() != JsonToken.END_OBJECT) { String fieldName = jp.getCurrentName(); // move from field name to field value current = jp.nextToken(); if (fieldName.equals("records")) { if (current == JsonToken.START_ARRAY) { // For each of the records in the array while (jp.nextToken() != JsonToken.END_ARRAY) { // read the record into a tree model, // this moves the parsing position to the end of it JsonNode node = jp.readValueAsTree(); // And now we have random access to everything in the object System.out.println("field1: " + node.get("field1").getValueAsText()); System.out.println("field2: " + node.get("field2").getValueAsText()); } } else { System.out.println("Error: records should be an array: skipping."); jp.skipChildren(); } } else { System.out.println("Unprocessed property: " + fieldName); jp.skipChildren(); } } } }
핵심 개념:
위 내용은 Java에서 거대한 JSON 파일을 구문 분석하는 가장 좋은 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!