【问题标题】:Trying to build a parser for fixed length file尝试为固定长度文件构建解析器
【发布时间】:2017-11-30 16:03:15
【问题描述】:

所以我正在尝试构建一个解析器,它基本上接收一个固定长度的文件,其中包含多个由换行符分隔的记录(每个记录都有可变数量的重复段)并将其解析为 POJO。然后它应该将 POJO 写入 JSON 文档,并将其作为文档插入 MongoDB 集合(每个固定长度文件的集合;这里最初的想法是我可以将创建的 JSON 导入数据库,但我不确定是否这或多或少是有效的)。

但是,解析器也应该能够采用某种映射 csv 类型的文件,该文件定义了字段名称 + 固定长度文件的长度。实际上,这应该允许解析器在给定映射文件的情况下解析任何固定长度的文件。

到目前为止我的想法:

  1. 考虑使用 Apache Camel 处理数据从固定长度到 POJO(BeanIO 组件)的解组以及 POJO 到 JSON 的编组

  2. 解析 CSV 以获取字段名称以及字段长度。找到一些方法来使用这些信息定义 POJO 和 JSON 模式(为了简单起见,我假设我也可以从这个 csv 中提取字段的数据类型)

我需要什么帮助:

  1. 有没有办法从我可以从 CSV 中提取的数据中生成 POJO/类定义?

  2. 是否也可以从 CSV 生成某种 JSON 模式以将 POJO 编组到?

谢谢。在我考虑这个问题时可能会有更多问题,但这就是我现在所拥有的。

【问题讨论】:

  • CSV 没有数据类型,一切都是字符串,不像 Excel 或 XML 可以携带元数据信息。以上所有这些都可以通过 Camel 在一定程度上实现。

标签: json apache-camel pojo jsonschema fixed-length-record


【解决方案1】:

是的,问题 1 可以使用 http://camel.apache.org/bindy.html

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

...
}

【讨论】:

    【解决方案2】:

    camel 中的BeanIO 数据格式将帮助您编写 CSV 文件中的记录与 POJO 之间的映射。您无法从 CSV 文件生成 POJO 类,您必须手动完成。

    创建映射文件后,您可以按如下方式处理文件:

    <dataFormats>
      <beanio id="myBeanio" mapping="org/apache/camel/dataformat/beanio/mappings.xml" streamName="employeeFile"/>
    </dataFormats>
    .....
    <from uri="file:location"/>
    <unmarshal ref="myBeanio"/>
    <bean ref="myActionBean" method="processRecords"/>
    ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2011-06-22
      • 2012-05-17
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多