我应该使用什么API将Java对象转换为CSV。我可以使用google-gson将java对象转换为CSV格式吗?
答案 0 :(得分:5)
Jackson可以轻松转换为CSV(使用Java和/或JSON)。
http://www.cowtowncoder.com/blog/archives/2012/03/entry_468.html上的帖子详细介绍了如何使用它。
答案 1 :(得分:1)
答案 2 :(得分:1)
这实际上是关于使用Jackson CSV的上述帖子的补充。我遇到的一个问题是,当我以编程方式执行并且不使用任何注释时,它会引起对象中不在CSV模式中的任何属性的任何错误。以下是一些可能有用的示例代码。如果您想了解更多有关过滤器和注释内省运算符的原因,请参阅here。
public class CsvWriter {
private final static String CSV_FILTER_NAME = "csvFilter";
public void writeObjects( OutputStream outputStream,
List<?> objects,
CsvSchema csvSchema ) throws IOException
{
HashSet<String> columnNames = new HashSet<String>();
for (CsvSchema.Column column : csvSchema) {
columnNames.add( column.getName() );
}
SimpleBeanPropertyFilter csvReponseFilter =
new SimpleBeanPropertyFilter.FilterExceptFilter(columnNames);
FilterProvider filterProvider = new SimpleFilterProvider().addFilter( CSV_FILTER_NAME, csvReponseFilter );
CsvMapper csvMapper = new CsvMapper();
csvMapper.setFilters( filterProvider );
csvMapper.setAnnotationIntrospector( new CsvAnnotationIntrospector() );
ObjectWriter objectWriter = csvMapper.writer(csvSchema);
objectWriter.writeValue( outputStream, objects);
}
private class CsvAnnotationIntrospector extends JacksonAnnotationIntrospector {
@Override
public Object findFilterId(Annotated a) {
return CSV_FILTER_NAME;
}
}
}
以下是如何使用它的示例:
public class CsvWriterTest extends TestCase {
public void testWriteObjects() throws Exception {
Vector <Entity> entities = new Vector<Entity>();
entities.add( new Entity("Test entity 1", "Test description 1", "Test unused field"));
entities.add(new Entity("Test entity 2", "Test description 2", "Test unused field"));
CsvSchema csvSchema = CsvSchema.builder()
.addColumn("name")
.addColumn("description")
.setUseHeader( true )
.build()
.withLineSeparator("\r\n");
CsvWriter csvWriter = new CsvWriter();
csvWriter.writeObjects(System.out, entities, csvSchema);
}
public class Entity {
private String name;
private String description;
private String unusedField;
// constructor, getter and setter methods omitted for brevity
}
}
测试方法的输出是:
名称,描述
&#34;测试实体1&#34;,&#34;测试描述1&#34;
&#34;测试实体2&#34;,&#34;测试描述2&#34;
答案 3 :(得分:1)