我必须从我的网络服务下载超过40,000条json记录,但下载需要很长时间。下载的数据存储在字符串中,但我无法解析该字符串。请告诉我解决这个问题的解决方案。
网址:https://buzoonga.co.uk/appapi/contacts.php?user_id=531
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
答案 0 :(得分:0)
查看gzip。优秀的文字压缩器你将删除~70%的大小:)你只需要在服务器端gzip并解压缩客户端。如果这种开销增加了时间,但下载时间是三分之一,那么最终可能会获胜。
还要考虑设计一个更好的架构来减少jsons的大小。 喜欢,而不是“animalBodyParts”把“abp”或其他东西。你没有举例说明你的jsons所以我只是在猜测。
答案 1 :(得分:0)
您可以使用JSONTokener
课程并传递InputStream
jObj = new JSONObject(new JSONTokener(httpEntity.getContent()));
为了减少下载时间,您需要在服务器端支持gzipped下载或将JSON结构更改为更紧凑的基于阵列的格式