- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有人可以帮忙吗?我坚持读取 csv 文件并将其序列化到 POJO 上。我正在使用 jackson 库中的 CsvMapper。阅读和序列化部分已完成并且工作正常。问题是当用户移动标题/列时导致序列化做出一些字母顺序假设,即 CSV 文件上的值也是按字母顺序排列的。
例如(下面的文件在第一行有标题,第二行有人员详细信息值)
personNameHeader,personAgeHeader
威廉,32岁
现在我的POJO如下
@JsonIgnoreProperties(ignoreUnknown = true)
// @JsonPropertyOrder(value = {"personNameHeader", "personAgeHeader" })
public class PersonDetailsCSVTemplate {
@JsonProperty("personNameHeader")
private String name;
@JsonProperty("personAgeHeader")
private String age;
//Public constructor and getters and setters...
这是从 CSV 中读取值并映射到类的代码
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
...
CsvMapper csvMapper = new CsvMapper();
CsvSchema schema = csvMapper.typedSchemaFor(PersonDetailsCSVTemplate.class).withHeader();
MappingIterator<PersonDetailsCSVTemplate > dataIterator = csvMapper.readerFor(PersonDetailsCSVTemplate.class).with(schema)
.readValues(data);
while (dataIterator.hasNextValue()) {
PersonDetailsCSVTemplate dataCSV = dataIterator.nextValue();
}
在序列化之后,可以看到 CsvMapper 映射了以下内容:PersonDetailsCSVTemplate.name = "32"
和PersonDetailsCSVTemplate.age = "Wiliam"
通过使用 @JsonPropertyOrder(value = {"personNameHeader", "personAgeHeader"})
注释类强制 CSV 始终是名称列后跟年龄列,这并不理想。
任何人都可以提出他们认为可行的任何建议吗?问候
最佳答案
从 Jackson 2.7 开始,您可以使用 withColumnReordering(true)
而不是 sortedBy()
CsvSchema schema = csvMapper
.typedSchemaFor(PersonDetailsCSVTemplate.class)
.withHeader()
.withColumnReordering(true);
关于java - 如何使用 Java 中的 CsvMapper 将 header 动态分配给 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44785689/
我想将 csv 文件读入字符串列表。我还希望它修剪空格并允许尾随逗号。我的 csv 文件如下所示: abcdefghijklmno , pqrstuwzabcdefh, ijklmnopqrstuwy
最近一直在尝试使用 JsonGenerator 以流式传输方式生成 JSON。即使您没有将 OutputStream 链接到直接输出来读取内容,如果您愿意,您也可以在最后读取整个内容。 我正在尝试用
我正在使用 jackson-dataformat-csv 将 POJO 集合导出为 CSV,如下所示: CsvSchema.Builder schemaBuilder = CsvSchema.buil
我正在使用 Jackson CSVMapper 将制表符分隔的文本文件读入 java 对象列表,并将其写回到另一个制表符分隔的文本文件中。我的类(class)如下所示: @Getter @Setter
将 CsvMapper 与 @JsonPropertyOrder 结合使用时,所有未显式命名的字段都将放在 CSV 记录的末尾。这意味着拼写错误会导致不同的 CSV 排序。 示例: public cl
出于某种原因,尽管配置了 FasterXML Jackson CSV 映射器来创建基于 POJO 的模式,但它坚持认为没有提供合适的配置。我得到以下异常: com.fasterxml.jackson.
如何在不循环计算行数的情况下从 InputStream 或 CsvMapper 获取行数? 下面我有一个从 CSV 文件创建的 InputStream。 InputStream content = (
我正在使用 jackson 将 POJO 序列化为 CSV。我的问题是我无法弄清楚如何在序列化时省略某些字段。我不想注释 POJO,因为它会影响需要这些字段的 JSON 和 XML 序列化。例如 pu
我有一个 Java 方法,它接收一个 CSV 值字符串和一个整数索引来引用 CSV 字符串中要解析的列。该方法返回与 CSV 字符串中的整数索引关联的值。 例如,如果我有一个带有标题的 CSV 字符串
有人可以帮忙吗?我坚持读取 csv 文件并将其序列化到 POJO 上。我正在使用 jackson 库中的 CsvMapper。阅读和序列化部分已完成并且工作正常。问题是当用户移动标题/列时导致序列化做
我是一名优秀的程序员,十分优秀!