栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何正确序列化和反序列化CSV?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何正确序列化和反序列化CSV?

从错误中,我想相信这与您的模式有关

Car
,该模式的列
{"color"}
取自
@JsonPropertyOrder
on
Car
而不是
"name"
值。

您可能想在其中添加

"parts"
,但是会得到与
"name"
该模式无关的相同错误。

在对您的代码进行一些更改之后,我得以序列化和反序列化一个

Car
对象。

部分

在这里,经过一些其他更改,它需要一个具有单个String值的构造函数,因此添加

@JsonPropertyOrder({"name"})public static class Part {    @JsonProperty("name")    private String name;    public Part() {        this("");    }    public Part(String partJSON) {        // TODO: Unserialize the parameter... it is a serialized Part string...         this.name = partJSON;    }

汽车

在这里,您将需要实现一种方法,该方法可以将

List<Part>
手动转换为CSV可读格式。

这样的方法看起来像这样

@JsonGetter("parts")public String getPartString() {    String separator = ";";    StringBuilder sb = new StringBuilder();    Iterator<Part> iter = this.parts.iterator();    while (iter.hasNext()) {        Part p = iter.next();        sb.append(p.getName());        if (iter.hasNext()) sb.append(separator);    }    return sb.toString();}

另外,不要忘了将模式固定在类的顶部

@JsonPropertyOrder({"color", "parts"})public static class Car {    @JsonProperty("color")    private String color;    @JsonProperty("parts")    private List<Part> parts;    public Car() {        this.parts = new ArrayList<>();    }

连载

您可以更改

serialize
方法以将类的类型作为通用类型参数,而不是
Class
像这样的显式类型。

public static final synchronized <T> String serialize(final T object, final Boolean withHeaders) throws IOException {    CsvMapper csvMapper = new CsvMapper();    CsvSchema csvSchema = csvMapper.schemaFor(object.getClass());    if (withHeaders) {        csvSchema = csvSchema.withHeader();    } else {        csvSchema = csvSchema.withoutHeader();    }    return csvMapper.writer(csvSchema).writevalueAsString(object);}

主-作家

现在,如果您序列化

Car
,应该会看到

color,partsred,gearbox;door;bumper

主要-读者

然后读取该CSV字符串并遍历

Car.getParts()

Car car = mapper.readerFor(Car.class).with(csvSchema).readValue(csv);for (Part p : car.getParts()) {    System.out.println(p.getName());}gearboxdoorbumper


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号