10

What API should I use to convert Java object to CSV. Can I use google-gson for java object conversion to CSV format?

4

4 回答 4

6

Jackson提供了与 CSV(使用 Java 和/或 JSON)的轻松转换。

http://www.cowtowncoder.com/blog/archives/2012/03/entry_468.html上的帖子很好地描述了如何使用它。

于 2012-08-14T20:30:39.987 回答
2

json2flat可以将JSON文档转换为CSV格式。

它不依赖于任何 POJO 来获取 CSV。

毕竟,用户希望如何以CSV表示形式查看JSON文档。

于 2016-12-10T21:35:15.017 回答
1

请告诉我您对 GSON 的具体要求。

Gson 提供 toJson() 和 fromJson() 方法将 Java 对象转换为 JSON,反之亦然。

你能参考这个链接吗?此链接提供了 GSON 下可用的 API 列表

于 2012-08-03T10:02:50.943 回答
1

这实际上是对上述关于使用Jackson CSV的补充。我遇到的一个问题是,当我以编程方式而不使用任何注释时,它会在对象中不在 CSV 模式中的任何属性上引发任何错误。这是一些可能有用的示例代码。如果您想了解更多关于为什么需要过滤器和注释内省器的信息,请参阅此处

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
}

}

测试方法的输出是:
name,description
"Test entity 1","Test description 1"
"Test entity 2","Test description 2"

于 2015-04-20T16:18:08.150 回答