【问题标题】:Jackson CsvMapper to map object with a map of maps to csvJackson CsvMapper 将对象与地图的地图映射到 csv
【发布时间】:2022-10-06 15:00:47
【问题描述】:

我有一个复杂的 java 对象,我想使用 Jacksons CsvMapper 映射到 csv。

public class TestObject {
  private Map<String, Map<String, String>> values;
  @JsonAnyGetter
  public Map<String, Map<String, String>> getValues() {
      return values;
  }

  @JsonAnySetter
  public void setValues(Map<String, Map<String, String>> values) {
    this.values = values;
  }

}

该对象是一个 TestObjects 列表:

 CsvMapper mapper = new CsvMapper(); 
 CsvSchema schema = mapper.schemaFor(clazz).withUseHeader(true);
 
 ObjectWriter myObjectWriter = mapper.writer(schema);
 return myObjectWriter.writeValueAsString(objectList);

但是,当我尝试将其映射到 csv 时,由于地图中的值,我得到一个错误,因为它是地图的地图。

Caused by: com.fasterxml.jackson.dataformat.csv.CsvMappingException: Unrecognized column \'test_column\': known columns: ....

有谁知道我怎样才能让 jacksons csvmapper 将此地图正确转换为 csv?

    标签: java csv jackson


    【解决方案1】:

    这可能会解决您的问题。完整示例here

    /**
     * @param listOfMap
     * @param writer
     * @throws IOException
     */
    public static void csvWriter(List<HashMap<String, String>> listOfMap, Writer writer) throws IOException {
        CsvSchema schema = null;
        CsvSchema.Builder schemaBuilder = CsvSchema.builder();
        if (listOfMap != null && !listOfMap.isEmpty()) {
            for (String col : listOfMap.get(0).keySet()) {
                schemaBuilder.addColumn(col);
            }
            schema = schemaBuilder.build().withLineSeparator(System.lineSeparator()).withHeader();
        }
        CsvMapper mapper = new CsvMapper();
        mapper.writer(schema).writeValues(writer).writeAll(listOfMap);
        writer.flush();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2011-10-06
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多