簡體   English   中英

如何使用Java將大型Json數據下載到CSV文件中?

[英]How to download large Json data into CSV file in Java?

我是Java Web應用程序的新手。 我嘗試了下面的鏈接將數據的JSON數組轉換為CSV文件http://jsfiddle.net/JXrwM/11322/

現在的問題是,每當獲取大量JSONArray值時,便無法盡快轉換CSV文件。 加載時間太長。

像下面這樣獲取JSONArray

ResultSet rs = (ResultSet) statement.getObject(P_CURSOR);
JSONArray jsonArr = new JSONArray();
while (rs.next()) {
       JSONObject data = new JSONObject();           
       data.put(LASTNAME, rs.getString(LASTNAME));
       data.put(FIRSTNAME, rs.getString(FIRSTNAME));
       jsonArr.put(data); //**Fetching JSONArray is too slow.**
}

這里的data包含多個記錄,以及如何更快地獲取jsonArr以及如何從ResultSet數據下載到CSV文件中。

您的問題可能是您正在進行“完全”讀取,然后對“ CSV”文件進行了“完全”寫入。

含義:您的代碼首先將所有數據讀取到單個ResultSet實例中,然后將該大對象一次性發送到CSVWriter。

也許答案是重新編寫整個代碼,以便一行一行地做到這一點。

含義:

  • 您設置CSVWriter
  • 從數據庫中讀取一行
  • 你寫使用CSVWriter 一行

通過這種解決方案,您可能能夠使用不同的線程來生成和使用該數據。 如圖所示:一個線程讀取單行,並將該數據放在“隊列”中,另一個線程從該隊列讀取,以寫入CSV數據。

這極有可能是使您加快整體執行時間的唯一方法。 當然,只有在確實有足夠的數據要處理的情況下,使用多個線程才有回報。

找到了如下解決方案,可使用傑克遜庫resultset集中以json格式寫入大數據,

        ResultSet rs = (ResultSet) statement.getObject(P_CURSOR);

        StringWriter writer = new StringWriter();
        JsonFactory jsonfactory = new JsonFactory();
        JsonGenerator jsonGenerator = jsonfactory.createJsonGenerator(writer);

        jsonGenerator.writeStartArray();
        while (rs.next()) {
            jsonGenerator.writeStartObject();
            jsonGenerator.writeStringField(KEY1, rs.getString(KEY1));
            jsonGenerator.writeStringField(KEY2, rs.getString(KEY2));
            jsonGenerator.writeStringField(KEY3, rs.getString(KEY3));
            jsonGenerator.writeEndObject();
        }

        jsonGenerator.writeEndArray();
        jsonGenerator.close();

這有助於以更少的加載時間從resultset集中讀取和寫入大量數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM