>Java >java지도 시간 >Java에서 거대한 JSON 파일을 구문 분석하는 가장 좋은 방법은 무엇입니까?

Java에서 거대한 JSON 파일을 구문 분석하는 가장 좋은 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-01 21:49:12546검색

What's the Best Approach to Parse Gigantic JSON Files in Java?

대용량 JSON 파일을 구문 분석하는 가장 좋은 방법: 종합 가이드

문제:

대량 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();
            }
        }
    }
}

핵심 개념:

  • 스트리밍: 파서는 순차적인 이벤트 중심 방식으로 파일을 처리합니다.
  • 트리 모델: JSON 파일 내의 개별 개체는 계층 트리로 변환됩니다. 구조.
  • 랜덤 액세스: 트리 모델을 사용하면 JSON 개체 트리 내에서 빠르고 유연한 탐색이 가능합니다.
  • 메모리 효율성: 스트리밍 접근 방식 전체 파일이 동시에 메모리에 로드되지 않도록 하여 메모리 소비를 최소화합니다.

위 내용은 Java에서 거대한 JSON 파일을 구문 분석하는 가장 좋은 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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