問題:
大量の JSON ファイルの解析には次のような課題があります彼らの大きなサイズに。この記事は、Java の GSON ライブラリを使用してそのようなファイルを効果的に解析するための最適なアプローチを決定することを目的としています。
解決策:
Jackson API の利用
推奨されるアプローチには、Jackson API の利用が含まれます。ストリーミング機能とツリーモデル解析機能のシームレスな組み合わせを提供し、ファイル全体を走査し、個々のオブジェクトをツリー構造に読み込むことができます。これにより、メモリの消費を最小限に抑えながら、ギガバイト サイズの JSON ファイルでも効率的に処理できます。
実装例
次のコード スニペットは、Jackson のコードを使用して大きな JSON ファイルを解析する方法を示しています。ストリーミングとツリーモデルの解析:
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 中国語 Web サイトの他の関連記事を参照してください。