我是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 文件中。
答案 0 :(得分:1)
您的问题可能是您正在进行“完全”读取,然后对CSV文件进行了“完全”写入。
含义:您的代码 first 将所有数据读取到单个ResultSet
实例中,然后将该大对象一次性发送到CSVWriter。
也许的答案是重新编写整个代码,以便一行一行地完成行。
含义:
基于这种解决方案,您也许可以使用不同的线程来生成和使用该数据。如图所示:一个线程读取单行,并将该数据放在“队列”中,另一个线程从该队列读取,以写入CSV数据。
最有可能的是,这是使您能够加快整体执行时间的唯一方法。当然,只有在确实有足够的数据要处理的情况下,使用多个线程才有回报。
答案 1 :(得分:0)
找到了使用 Jackson库从json
以resultset
格式写入大数据的解决方案,
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
读取和写入大量数据。