繁体   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