JSON解析大数据

时间:2013-12-03 10:50:13

标签: java json

我必须从我的网络服务下载超过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;

}  

2 个答案:

答案 0 :(得分:0)

查看gzip。优秀的文字压缩器你将删除~70%的大小:)你只需要在服务器端gzip并解压缩客户端。如果这种开销增加了时间,但下载时间是三分之一,那么最终可能会获胜。

还要考虑设计一个更好的架构来减少jsons的大小。 喜欢,而不是“animalBodyParts”把“abp”或其他东西。你没有举例说明你的jsons所以我只是在猜测。

答案 1 :(得分:0)

您可以使用JSONTokener课程并传递InputStream

jObj = new JSONObject(new JSONTokener(httpEntity.getContent()));

为了减少下载时间,您需要在服务器端支持gzipped下载或将JSON结构更改为更紧凑的基于阵列的格式