我编写了一个Java类来生成CSV文件:
public class CSVGenerator {
private static String REFERRAL_HEADER = "Position,Mail,Invitations,Qualified invitations";
private static String TOPS_HEADER = "Position,Mail,Number of conferences,Number of new contacts, Average conf duration";
public static String generate(String source, JsonNode root) throws IOException {
String result = "";
CSVWriter writer = new CSVWriter(new FileWriter(source+".csv"));
if (source.compareTo("referral") == 0)
result = REFERRAL_HEADER;
else if (source.compareTo("tops") == 0)
result = TOPS_HEADER;
writer.writeNext(result.split(","));
Iterator<JsonNode> it = root.getElements();
while (it.hasNext()) {
Iterator<JsonNode> it2 = it.next().getElements();
result = "";
while (it2.hasNext())
{
result += it2.next().asText();
if (it2.hasNext())
result += ",";
}
writer.writeNext(result.split(","));
}
writer.close();
return result;
}
}
生成的文件格式不正确。 每行只有一个单元格,包含所有单元格和分隔逗号,如下所示:
header1,header2,header3
1,support,test
2,alpha,gamma
我做错了什么?
修改
更准确地说明输出
我有: “头1,标题2,header3”, “” “”
我想: “头1”, “标题2”, “header3”
这是我的输出。一个唯一单元格中的每一行。
""Position","Mail","Invitations","Qualified invitations""
""1","xxxxx.com","129","23""
""2","xxxx.com","54","8""
""3","xxxx.com","197","5""
""4","xxxx","13","5""
""5","xxxx","8","4""
""6","xxxx.com","4","4""
""7","xxx.com","31","3""
""8","xxx.com","30","3""
""9","xxx.com","18","3""
""10","xxx.com","13","3""
答案 0 :(得分:-1)
也许这会更好。干杯!
result += \"+data.asText()+\";
答案 1 :(得分:-1)
您是否尝试在结果属性周围添加引号;
result += "\""+data.asText()+"\"";
请记住,我不熟悉jsondata对象。
此外,你应该逐行编写每一行,而不是在最后添加所有内容。
是的,看看内置的CSVReader和CSVWriter。
答案 2 :(得分:-1)
尝试在标题字段周围添加引号:
private static String REFERRAL_HEADER = "\"Position\",\"Mail\",\"Invitations\",\"Qualified invitations\"\n";
private static String TOPS_HEADER = "\"Position\",\"Mail\",\"Number of conferences\",\"Number of new contacts\", \"Average conf duration\"\n";
答案 3 :(得分:-1)
我在一个groovy shell中尝试了你的代码的一部分,我得到了正确的结果:
groovy:000> string = new java.io.StringWriter()
===>
csv = new CSVWriter(string)
===> au.com.bytecode.opencsv.CSVWriter@4d9ac0b4
groovy:000> csv.writeNext(REFERRAL_HEADER.split(","))
===> null
groovy:000> string.toString()
===> "Position","Mail","Invitations","Qualified invitations"
您可以尝试使用commons-csv代替CSVWriter。该库有点时髦,因为它是根据数据库量身定制的。