如何使用Java将大型Json数据下载到CSV文件中?

时间:2018-07-24 06:54:06

标签: java json csv

我是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 文件中。

2 个答案:

答案 0 :(得分:1)

您的问题可能是您正在进行“完全”读取,然后对CSV文件进行了“完全”写入。

含义:您的代码 first 将所有数据读取到单个ResultSet实例中,然后将该大对象一次性发送到CSVWriter。

也许的答案是重新编写整个代码,以便一行一行地完成

含义:

  • 您设置了CSVWriter
  • 您从数据库中获取了一个
  • 您使用CSVWriter编写一个

基于这种解决方案,您也许可以使用不同的线程来生成和使用该数据。如图所示:一个线程读取单行,并将该数据放在“队列”中,另一个线程从该队列读取,以写入CSV数据。

最有可能的是,这是使您能够加快整体执行时间的唯一方法。当然,只有在确实有足够的数据要处理的情况下,使用多个线程才有回报。

答案 1 :(得分:0)

找到了使用 Jackson库jsonresultset格式写入大数据的解决方案,

        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读取和写入大量数据。