将复合java对象转换为CSV

将复合java对象转换为CSV,java,json,csv,jackson,org.json,Java,Json,Csv,Jackson,Org.json,我有一个对象,比如Response.java,如下所示: class Response { private User user; // has firstName, lastName, age etc. private Address address; // has city, state, country etc. private OrderInfo orderInfo; // has orderNumber, orderDate etc. // constuct

我有一个对象,比如Response.java,如下所示:

class Response
{
   private User user;  // has firstName, lastName, age etc.
   private Address address; // has city, state, country etc.
   private OrderInfo orderInfo;  // has orderNumber, orderDate etc.

   // constuctors, getters/setters follow

}
num,age,name
1,12,Colin
我需要将这些对象的列表转换为csv,因此我的最终目标如下:

firstName, lastName, age, city, state, country, latitude, orderNumber, orderDate
john, doe, 25, dallas, tx, usa, somelat, 101, 08/17/2015
jane, doe, 21, atlant, ga, usa, somelat, 102, 08/15/2015
我尝试使用两个库——jackson(csv数据格式)、org.json(JsonArray),但没有得到预期的结果

这是我的jackson csv代码:

Response response = getResponse();
final CsvMapper mapper = new CsvMapper();
final CsvSchema schema = mapper.schemaFor(Response.class);
final String csv = mapper.writer(schema).writeValueAsString(response);
和杰克逊在一起,我越来越开心

com.fasterxml.jackson.core.JsonGenerationException: CSV generator does not support Object values for properties

有没有一种方法可以按照我所需要的方式将复合对象转换为csv(只是没有类似json的分组的字段)?

因此我运行了您在测试项目中使用的类似代码,看起来您需要在所有对象(用户、地址和OrderInfo)上使用@jsonUnrapped

Jackson CSV不支持对象作为属性,这就是为什么会出现该异常。以下是Github上的问题:

下面是我用来验证这一点的示例代码:

Test response = new Test();
response.setNum(1);
Stub s = new Stub();
s.setAge("12");
s.setName("Colin");
response.setS(s);
final CsvMapper mapper = new CsvMapper();
final CsvSchema schema = mapper.schemaFor(Test.class);
final String csv = mapper.writer(schema.withUseHeader(true)).writeValueAsString(response);
System.out.println(csv);
上述代码的输出如下所示:

class Response
{
   private User user;  // has firstName, lastName, age etc.
   private Address address; // has city, state, country etc.
   private OrderInfo orderInfo;  // has orderNumber, orderDate etc.

   // constuctors, getters/setters follow

}
num,age,name
1,12,Colin

您正在使用Jackson CSV库吗?如果没有,这里将详细介绍如何实现:您是否尝试重写Response类的toString方法?我认为通过使用它,您可以得到期望的结果。我们实际上不需要看到bean类。我们需要了解您是如何使用Jackson执行序列化的。它生成的是JSON,而不是CSV。@jgitter-我已经用我的jackson代码和jackson错误消息更新了我的问题(JSON输出是必要的,因为我还尝试了shemaFor(JSON)@colimc-是的,我使用的是jackson CSV库感谢您指出这个问题,它与@JsonUnwrapped一起工作。