【问题标题】:How to download large Json data into CSV file in Java?如何在 Java 中将大型 Json 数据下载到 CSV 文件中?
【发布时间】:2018-07-24 06:54:05
【问题描述】:

我是 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 有什么关系?
  • @S Jade 如果 CSV 文件有超过 2000 条记录太慢,否则 5 秒内下载 CSV。
  • @dainu 我在jsonArr 中获取多个数据。例如:10000*[{"Vehicle":"BMW","Date":"30, Jul 2013 09:24 AM","Location":"Hauz Khas, Enclave, New Delhi, Delhi, India","Speed" :42}] (即)10000 次行。所以获取jsonArr的加载时间需要5-10分钟。如何解决抓取时间?
  • 我注意到你的问题仍然是“开放的”——因为你没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否已解决,并对花时间回答你的人表示感谢。谢谢!

标签: java json csv


【解决方案1】:

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

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

也许答案是修改你的整个代码来为一个一个地做。

意思:

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

通过这样的解决方案,您可能能够使用不同的线程来生成和使用该数据。如:一个线程读取单行,并将该数据放在某个“队列”中,另一个线程从该队列中读取,以写入 CSV 数据。

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

【讨论】:

    【解决方案2】:

    找到了使用 Jackson 库resultsetjson 格式写入大数据的解决方案,如下所示,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多