0

解析と管理のための本当に大きなJSONファイルがあります。私のJSONファイルにはこのような構造が含まれています

[
{"id": "11040548","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15"
},
{"id": "11040549","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15"
},
....
{"id": "11040548","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15"
}
]

私のJSONファイルにはニュースWebサイトのトピックに関するデータが含まれており、実質的に毎日このJSONファイルは劇的に増加します。

そのファイルの解析には、私が使用します

URL urlLinkSource = new URL(OUTBOX_URL);
urlLinkSourceReader = new BufferedReader(new InputStreamReader(
                        urlLinkSource.openStream(), "UTF-8"));
ObjectMapper mapper = new ObjectMapper();
List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); //DataContainerList contains id, key1, key2, key3..key15

私の問題は、この行にロードしたいということです

List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); 

JSONオブジェクトの範囲のみ(最初の10個のオブジェクト、2番目の10個のオブジェクト)。アプリにページングモードでニュースを10個だけ表示する必要があるためです(常に、表示する必要のある10個のインデックスを知っています)。10,000個のオブジェクトをロードし、そのうちの最初の10個だけを反復するのは完全に愚かでした。だから私の質問は、これと同じようにロードする方法です:

List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); 

JSONファイル全体のすべてのオブジェクトをロードせずにインデックスFROM-TO(たとえば30から40)を持つオブジェクトのみ?

よろしく

4

1 に答える 1

1

必要に応じて、「からへのインデックスを使用してオブジェクトをロードする」の意味によって異なります。

すべてを読み取り、サブリストのみをバインドする その場合の解決策は、ストリーム全体を読み取り、それらのインデックス内の値のみをバインドすることです。jacksonsストリーミングAPIを使用して、自分で行うことができます。ストリームを解析するには、カウンターを使用して実際のインデックスを追跡し、必要なものだけをPOJOにバインドします。ただし、ファイルが大きく、リアルタイムで実行される場合、これは適切なソリューションではありません。

それらのインデックス間のデータのみを読み取る

ファイルが大きく、パフォーマンスが重要な場合は、これを行う必要があります。大きなファイルを1つ持つ代わりに、json配列を範囲に一致する複数のファイルに分割してページ分割を行い、特定のファイルコンテンツを配列に逆シリアル化します。

お役に立てれば...

于 2013-03-06T17:21:31.323 に答える