问题标签 [jackson-dataformat-csv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5332 浏览

jackson - 忽略使用 Jackson CSV 解析 CSV 文件的特定列

我的问题是我需要将具有任意列/顺序的 CSV 文件解析为已知域 POJO(比如 Person)。我可以确定我需要处理哪些列,而忽略其余列。

选项 CsvParser.Feature.IGNORE_TRAILING_UNMAPPABLE" 似乎正是我需要的,但我需要处理的列不必在 CSV 文件的开头进行分组,我不能强制用户“重新排序”列他们上传的 CSV 文件。此外,有时我没有得到标题行,但 UI 会强制用户识别列并传递此信息。

例如,我有以下 CSV 文件:

我只需要 6 列中的 4 列(名字、姓氏、出生日期、邮政编码),因为我的 Person POJO 仅包含这些字段:

我已经为 Person 定义了一个 CsvSchema,并指定了我感兴趣的列(名字、姓氏、IGNORE、DOB、IGNORE2、邮政编码),因为我想跳过列(昵称、职业)。然而,“IGNORE”列在反序列化器中的映射过程中被忽略,我最终得到“DOB”的“昵称”值,导致 DOB 字段的值无效。

0 投票
2 回答
1445 浏览

java - 使用带有 jackson-dataformat-csv 的日期字段时出现 InvalidFormatException 失败

我正在尝试使用 jackson-dataformat-csv 中的 CSVMapper 实用程序来解析 CSV 文件并创建 POJO 记录以插入 mysql 数据库。

这样做时,如果日期信息作为 CSV 中的列之一存在以映射到 POJO 中的日期字段,我将面临问题。

通过读取 CSV 文件并将其转换为 POJO,我有以下代码。

错误.java

控制器代码

这确实工作了很长一段时间,我能够在 while 循环中打印记录,然后将记录插入到 mysql 表中。

不知道代码发生了什么变化,现在我遇到了以下问题

0 投票
1 回答
1677 浏览

java - Hashmap 无法被 CsvMapper 识别

我正在尝试序列化包含 HashMap 的对象,但出现以下异常。

另外,我不明白为什么在序列化方面需要有一个模式。在我看来,没有办法拥有一个无法识别的字段,因为它都是在类中指定的。

因为我不太了解杰克逊,所以我搜索并尝试了这两个注释的各种组合。@JsonUnwrapped @JsonAnyGetter

用于序列化的代码


尝试 NR 2

}

新错误

0 投票
1 回答
76 浏览

jackson - 从csv读取字符串作为级别

我有一个如下所示的 csv:

我想将第二个(级别)值读取为 org.slf4j.event.Level 。我正在使用 jackson-dataformat-csv 库,但找不到将字符串 ERROR、WARN 等反序列化为级别枚举的示例。这是我尝试过的:

我的错误 POJO 如下:

但我收到以下 JsonMappingException

0 投票
1 回答
455 浏览

jackson - Jackson CsvMapper 只读取第一行

我想将 csv 文件读入字符串列表。我还希望它修剪空格并允许尾随逗号。我的 csv 文件如下所示:

当我尝试使用我的方法解析它时:

我得到:

如何解决?

0 投票
1 回答
1790 浏览

java - 写入 CsvMapper 并随后收集全部内容

最近一直在尝试使用JsonGenerator. 即使您没有将 链接OutputStream到直接输出以阅读内容,如果您愿意,您也可以在最后阅读整个内容。

我试图用杰克逊复制完全相同的东西,它是 CSV 库。

所以基本上我想知道的是,有没有办法收集整个内容CsvMapper?一直潜伏在 API 中,找不到任何方法来访问任何流或其他任何东西。

0 投票
3 回答
452 浏览

java - 有没有办法使用 Jackson 和/或其相关库之一(csv、json 等)将字符串转换为 Java 类型?

是否有一种机制可以应用一组标准检查来检测字符串,然后将其转换为检测到的类型,使用 Jackson 的标准文本相关库(csv、json 甚至 jackson-core)之一?我可以想象将它与与该值关联的标签(例如 CSV 标头)一起使用来执行类似以下的操作:

需要一组“提取器”来应用转换,并且类的消费者必须意识到“对象”返回类型的“歧义”,但仍然能够消费和使用信息,因为它目的。

我目前正在考虑的示例涉及构建 SQL DDL 或 DML,例如使用从评估 csv 文件中的行派生的 List 中的信息的 CREATE Table 语句。

经过更多的挖掘,希望在那里找到一些东西,我写下了我的想法的开始。

请记住,我在这里的意图不是要呈现“完整”的东西,因为我确信这里缺少一些东西,没有解决边缘情况等。

例如,这pasrse(List<Map<String, String>> rows, List<String> headers源于这样的想法,即这可能是从杰克逊读取的 CSV 文件中的行样本。

同样,这并不完整,所以我不想挑出以下所有问题。问题不是“我们将如何写这个?”,而是“有没有人熟悉存在的类似以下内容的东西?”。

一个简单的解析器,它parse来自我List<Map<String,String>>从 CSVReader 获得的上下文。

提取器。只是一个示例,说明如何在某处注册值的“提取器”(包含在字符串中)以进行查找。它们也可以通过任何其他方式引用。

我从 JavaTypeParser 类中运行它,以供参考。

0 投票
0 回答
136 浏览

java - 杰克逊 CSV。标题中的引号转义

我有一个 CSV 文件,其中一个标题看起来像 Name;Lastname;"Some info\n more info"

我的解析器:

但是解析后,我丢失了标题中的引号并得到了Name;Lastname;Some info\n more info. 如何保存报价?

0 投票
2 回答
472 浏览

java - Jackson 如何将一个 Pojo 字段映射到 2 个(json)字段(相同的内容,不同的名称)

我用来Jackson将 s 序列POJO化为CSV. 现在我们需要将某些字段的命名更改为snake_case。这很容易做到@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

出于兼容性原因,我们需要一些重命名的字段也使用它们的旧名称。

例如:

默认将序列化为“someField”,SnakeCaseStrategy将序列化为“some_field”。

如何获得两者的序列化?:

我的第一次尝试是混合:

但这实际上只会撤消命名策略的更改。那么如何在序列化中复制一个字段 - 最好不要通过更改 Pojo(当所有客户端都可以处理时,应该删除这个复制的字段)。

小更新:

在我的真实课堂中,有一些使用JsonUnwrapped的嵌套类,并且文档指出这不适用于自定义序列化程序(不知道这在这里会有所不同)。

0 投票
3 回答
489 浏览

spring - Jackson ObjectWriter 仅从流中写入第一个条目

我想创建一个 Spring Boot 控制器,它使用流中的数据创建一个 CSV 文件。我使用 Jackson CSV (jackson-dataformat-csv 2.12.1) 将数据流从 DB 写入 StreamingResponseBody。

为了简单起见,我将数据库中的实际数据替换为包含1, 2, 3. 我想要一个如下所示的 CSV 文件:

但它只包含第一个条目 ( 1)。有人可以帮我找出问题吗?

请不要说我不想在服务器上的某处创建文件,我想将内容直接流式传输给用户。

我的代码如下所示: