從對這個問題您的意見:
我有一個名爲文檔一個JSON數組。然後在這個數組中,我有多行,其中每行都有對象Action和Filenames(指向其他文件位置,這是html格式)。基本上我想要逐行閱讀這個json文件,並單獨處理這個動作和文件名。因爲動作和文件名在每行中都不相同。
據我瞭解,你正在使用的格式是這樣的:
{"Documents":[
{"Action":"action 1", "Filenames":["file 1a", "file 1b"]},
{"Action":"action 2", "Filenames":["file 2a", "file 2b"]},
// and so on for thousands more array entries
]}
而不是試圖一次性加載整個頂層JSON對象,它會更有意義使用某種流媒體API並一次處理一個「行」。例如,使用Gson你可以做這樣的事情與JsonReader
API:
InputStream is = new URL(url).openStream();
BufferedReader r = new BufferedReader(new InputStreamReader(
is, Charset.forName("UTF-8")));
JsonReader reader = new JsonReader(r);
JsonParser parser = new JsonParser();
reader.beginObject(); // the initial '{'
String name = reader.nextName();
assert "Documents".equals(name);
reader.beginArray(); // the opening '[' of the Documents array
while(reader.hasNext()) {
JsonObject doc = parser.parse(reader).getAsJsonObject();
String action = doc.get("Action").getAsString();
JsonArray filenames = doc.getAsJsonArray("Filenames");
// do something with the document here
// ...
}
reader.endArray(); // ending ']' of Documents
reader.endObject(); // final '}'
reader.close();
這樣,你只能有一個時間保留在內存中一個「行」。
還有其他JSON庫類似的API,儘管有些人比其他人更繁瑣(例如與json.org JSONTokener
你必須處理:
和,
分離自己明確)。
你的代碼有問題嗎? – MxyL
你的代碼有什麼問題?該文件只是一個大的JSON對象? –
你在使用哪個JSON庫?如果您知道您期望的JSON的一般格式,大多數圖書館都可以使用某種流API。 –