我想要Order
个对象的CSV格式。我的Order
对象的订单为details
,order line details
和item details
。请在下面找到java对象:
Order {
OrderNo, OrderName, Price,
OrderLine {
OrderLineNo, OrderLinePrice,
Item{
ItemNo, ItemName, Item Description
}
}
}
任何人都可以指导我为此创建csv格式。
答案 0 :(得分:0)
为您要为其创建CSV文件的Object创建一个POJO类,并使用java.io.FileWriter在csv文件中写入/追加值。这个elasticsearch-http-basic plugin将为您提供帮助。
答案 1 :(得分:0)
如果您有冒险精神,我会在uniVocity-parsers中为CSV中的嵌套元素构建支持。
2.0.0-SNAPSHOT版本支持使用注释解析嵌套bean。我们计划在几周内发布最终版本。编写支持尚未实现,因此您必须手动完成该部分(使用当前API应该相当容易)。
解析这种结构更复杂,但解析器似乎在大多数情况下都能正常工作。看看那个测试用例:
输入CSV:
1,Foo
Account,23234,HSBC,123433-000,HSBCAUS
Account,11234,HSBC,222343-130,HSBCCAD
2,BAR
Account,1234,CITI,213343-130,CITICAD
请注意,每行的第一列标识将读取哪个bean。作为"客户"在CSV中匹配班级名称,您不需要注释
<强>的POJO 强>
enum ClientType {
PERSONAL(2),
BUSINESS(1);
int typeCode;
ClientType(int typeCode) {
this.typeCode = typeCode;
}
}
public static class Client {
@EnumOptions(customElement = "typeCode", selectors = { EnumSelector.CUSTOM_FIELD })
@Parsed(index = 0)
private ClientType type;
@Parsed(index = 1)
private String name;
@Nested(identityValue = "Account", identityIndex = 0, instanceOf = ArrayList.class, componentType = ClientAccount.class)
private List<ClientAccount> accounts;
}
public static class ClientAccount {
@Parsed(index = 1)
private BigDecimal balance;
@Parsed(index = 2)
private String bank;
@Parsed(index = 3)
private String number;
@Parsed(index = 4)
private String swift;
}
解析输入的代码
public void parseCsvToBeanWithList() {
final BeanListProcessor<Client> clientProcessor = new BeanListProcessor<Client>(Client.class);
CsvParserSettings settings = new CsvParserSettings();
settings.getFormat().setLineSeparator("\n");
settings.setRowProcessor(clientProcessor);
CsvParser parser = new CsvParser(settings);
parser.parse(new StringReader(CSV_INPUT));
List<Client> rows = clientProcessor.getBeans();
}
如果您在使用解析器时发现任何问题,请发送更新this issue