gpt4 book ai didi

Java jackson : Parsing a csv file into an object containing a List of objects

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:22 24 4
gpt4 key购买 nike

我正在尝试使用 Jackson CsvParser 将一个 csv 文件解析为一个对象,该对象还包含另一个类的列表。

因此前两列包含需要绑定(bind)到父类的数据,之后的数据需要绑定(bind)到另一个类。

public class Person {
private String name;
private String age;
private List<CarDetails> carDetails;

//Getters+setters
}

public class CarDetails {
private String carMake;
private String carRegistration;

//Getters+setters
}

要解析的日志如下所示:

John Doe, 30, Honda, D32GHF

或者在所有拥有 2 辆车的用户的另一个日志中,它可能看起来像:

Jane Doe, 29, Mini, F64RTZ, BMW, T56DFG 

将前2项数据解析到“Person”类是没有问题的。

CsvMapper mapper = new CsvMapper();
CsvSchema schema = CsvSchema.builder()
.addColumn("name")
.addColumn("age")

for(numberOfCars=2; numberOfCars!=0 ; numberOfCars--)
schema = schema.rebuild()
.addColumn("carMake")
.addColumn("carRegistration")

MappingIterator<Map.Entry> it = mapper
.reader(Person.class)
.with(schema)
.readValues(personLog);
List<Person> people = new ArrayList<Person>();
while (it.hasNextValue()) {
Person person = (Person) it.nextValue();
people.add(person);
}

但我不知道如何解析 CarDetails。似乎我必须能够搜索该值,创建一个新的 CarDetails 对象并将其添加到 Person 对象,但我看不到如何提取该信息。


我的解决方案如下:

List<Person> people = new ArrayList<Person>();

MappingIterator<Map<?,?>> it = mapper.reader(schema).withType(Map.class).readValues(personLog);
while(it.hasNextValue()) {
Person person = new Person();
CarDetails = new CarDetails();
Map<?,?> result = it.nextValue();
person.setName(result.get("name").toString());
carDetails.setCarMake(result.get("carMake").toString());
person.addCarDetails(carDetails);
people.add(person);
}

最佳答案

如果您查看 CsvMapper.readerWithSchemaFor 的 Javadoc ,它指出:

no CSV types can be mapped to arrays or Collections

关于Java jackson : Parsing a csv file into an object containing a List of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com