私は、Json をファイルまたは URL から jsonarray および jsonobjects に解析する Android アプリケーションを作成しています。問題は、私の json が 3.3 mb であり、単純なコードを使用すると、次のようなものになることです (作業中のため、実際のコードにアクセスできず、チュートリアルからコードをコピーしたため、エラーが発生する可能性があります)
(すでに入力ストリームのコンテンツがあると仮定します)
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
String twitterfeed = builder.toString();
}
JSONArray jsonArray = new JSONArray(twittefeed);
Log.i(ParseJSON.class.getName(),
"Number of entries " + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
Android デバイスでこのコードを実行すると、文字列を jsonArray に解析するときに OutOfMemory エラーが発生します。合計文字列が 17 mb (3.3 mb の json ファイル?!) であることがわかったいくつかのことをログに記録しました。twitterfeed などの小さな json ファイルを使用すると、コードは正常に動作します。この 17 MB の文字列をメモリに格納すると、メモリが不足するため、json を解析できません。
多くの調査の後、入力ストリームを解析できることがわかったので、ジャクソンが私の解決策である可能性があることがわかりました。これは役立つはずです。メモリに 17 MB の文字列は必要ないからです。これは私が推測する最も効率的な方法ではありません....しかし、これが本当にうまくいくかどうかはわかりません。これが実際に機能することを知っている人はいますか?チュートリアルはどこにありますか?
「createJsonParser -- public JsonParser createJsonParser(InputStream in)」を見つけて、これが私のやり方だと思います...しかし、コードにこれを実装する方法がわからず、例が見つかりません。これがどのように機能するか知っている人はいますか?