tom*_*tom 5 java csv serialization jackson
我正在使用 jackson 将 POJO 序列化为 CSV。我的问题是我不知道如何在序列化时省略某些字段。我不想对 POJO 进行注释,因为它会影响需要这些字段的 JSON 和 XML 序列化。例如
public class POJO {
public string field1; //required by JSON and CSV
public string field2; //only required by JSON
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
对我有用的是将CsvMapper设置设置com.fasterxml.jackson.core.JsonGenerator.Feature.IGNORE_UNKNOWN为 true
CsvMapper mapper = new CsvMapper(); //com.fasterxml.jackson.dataformat.csv.CsvMapper
MAPPER.configure(Feature.IGNORE_UNKNOWN, true);
Run Code Online (Sandbox Code Playgroud)
将所需的列添加到架构中。
CsvSchema schema = CsvSchema.builder();
.addColumn("A")
.addColumn("C")
.build();
Run Code Online (Sandbox Code Playgroud)
为我的 POJO
public class MyClass{
@JsonProperty("A")
private string a;
@JsonProperty("B")
private string b;
@JsonProperty("C")
private string c;
//getters setters
}
Run Code Online (Sandbox Code Playgroud)
为了获取 CSV 字符串,我这样做了:
List<MyClass> list = new MyClass();
MyClass row = new MyClass();
row.setA("Value A");
row.setB("Value B");
row.setC("Value C");
list.add(row);
ObjectWriter ow = mapper.writer(schema);
String csv = ow.writeValueAsString(list);
Run Code Online (Sandbox Code Playgroud)
输出(带标题):
A,C
"Value A","Value C"
Run Code Online (Sandbox Code Playgroud)