Maps 使用beanIo将平面文件转换为json

Maps 使用beanIo将平面文件转换为json,maps,gson,bean-io,Maps,Gson,Bean Io,我正在尝试使用beanIo到json解析一个固定长度的平面文件 代码: 它为找到的每个记录生成单独的json对象 参考地点: 以下是我的要求: 我想要一个统一的Json文件 如果记录重复,则应形成json数组 我将非常感谢您的帮助 此答案基于OP提供的链接中的数据和pattern mapping.xml文件 数据: 标题,01012013 Robertus,Lilik,高级开发人员,“75000,00”,10012009 简,能源部,建筑师,“80000,00”,01152008 乔恩·安德森

我正在尝试使用beanIo到json解析一个固定长度的平面文件

代码:

它为找到的每个记录生成单独的json对象

参考地点:

以下是我的要求:

  • 我想要一个统一的Json文件
  • 如果记录重复,则应形成json数组

  • 我将非常感谢您的帮助

    此答案基于OP提供的链接中的数据和
    pattern mapping.xml
    文件

    数据:

    标题,01012013
    Robertus,Lilik,高级开发人员,“75000,00”,10012009
    简,能源部,建筑师,“80000,00”,01152008
    乔恩·安德森,经理,“90000,00”,03182006
    页脚,3

    映射文件:
    这是修改后的
    模式映射.xml
    文件。注意使用
    元素(myGroup)将所有内容封装到单个组中,这将迫使
    BeanReader
    一次性读取所有内容。我还将
    页眉
    页脚
    记录的
    maxOccurs
    更改为1(一)。此外,还向emp`记录添加了
    collection=“list”属性

    <?xml version='1.0' encoding='UTF-8' ?>
    <beanio xmlns="http://www.beanio.org/2012/03" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
    
      <stream name="empData" format="csv">
        <group name="myGroup" class="map">
          <record name="header" class="map" ridLength="0-2" maxOccurs="1">
            <field name="id" rid="true" maxOccurs="1" literal="Header" />
            <field name="date" />
          </record>
    
          <record name="emp" class="map" ridLength="4-5" collection="list">
            <field name="firstName" />
            <field name="lastName" />
            <field name="title" />
            <field name="salary" type="java.math.BigDecimal" format="#,###,###,00" />
            <field name="hireDate" type="java.util.Date" format="MMddyyyy" minOccurs="0" />
          </record>
    
          <record name="trailer" class="map" ridLength="2" maxOccurs="1">
            <field name="id" />
            <field name="count" />
          </record>
        </group>
      </stream>
    </beanio>
    

    希望这有帮助

    这个答案基于OP提供的链接中的数据和
    pattern mapping.xml
    文件

    数据:

    标题,01012013
    Robertus,Lilik,高级开发人员,“75000,00”,10012009
    简,能源部,建筑师,“80000,00”,01152008
    乔恩·安德森,经理,“90000,00”,03182006
    页脚,3

    映射文件:
    这是修改后的
    模式映射.xml
    文件。注意使用
    元素(myGroup)将所有内容封装到单个组中,这将迫使
    BeanReader
    一次性读取所有内容。我还将
    页眉
    页脚
    记录的
    maxOccurs
    更改为1(一)。此外,还向
    emp`记录添加了
    collection=“list”属性

    <?xml version='1.0' encoding='UTF-8' ?>
    <beanio xmlns="http://www.beanio.org/2012/03" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
    
      <stream name="empData" format="csv">
        <group name="myGroup" class="map">
          <record name="header" class="map" ridLength="0-2" maxOccurs="1">
            <field name="id" rid="true" maxOccurs="1" literal="Header" />
            <field name="date" />
          </record>
    
          <record name="emp" class="map" ridLength="4-5" collection="list">
            <field name="firstName" />
            <field name="lastName" />
            <field name="title" />
            <field name="salary" type="java.math.BigDecimal" format="#,###,###,00" />
            <field name="hireDate" type="java.util.Date" format="MMddyyyy" minOccurs="0" />
          </record>
    
          <record name="trailer" class="map" ridLength="2" maxOccurs="1">
            <field name="id" />
            <field name="count" />
          </record>
        </group>
      </stream>
    </beanio>
    

    希望这有帮助

    请添加您的
    模式映射.xml
    文件,如有必要,请添加您的
    模式映射.xml
    文件,如有必要,请添加POJO'sThanks@nicosch,这是我能得到的最佳答案!!谢谢@nicosch这是我能得到的最好答案!!
    <?xml version='1.0' encoding='UTF-8' ?>
    <beanio xmlns="http://www.beanio.org/2012/03" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
    
      <stream name="empData" format="csv">
        <group name="myGroup" class="map">
          <record name="header" class="map" ridLength="0-2" maxOccurs="1">
            <field name="id" rid="true" maxOccurs="1" literal="Header" />
            <field name="date" />
          </record>
    
          <record name="emp" class="map" ridLength="4-5" collection="list">
            <field name="firstName" />
            <field name="lastName" />
            <field name="title" />
            <field name="salary" type="java.math.BigDecimal" format="#,###,###,00" />
            <field name="hireDate" type="java.util.Date" format="MMddyyyy" minOccurs="0" />
          </record>
    
          <record name="trailer" class="map" ridLength="2" maxOccurs="1">
            <field name="id" />
            <field name="count" />
          </record>
        </group>
      </stream>
    </beanio>
    
    myGroup: {
      "trailer": {
        "count": "3",
        "id": "Footer"
      },
      "header": {
        "date": "01012013",
        "id": "Header"
      },
      "emp": [
        {
          "firstName": "Robertus",
          "lastName": "Lilik",
          "hireDate": "Oct 1, 2009 12:00:00 AM",
          "title": "Senior Developer",
          "salary": 7500000
        },
        {
          "firstName": "Jane",
          "lastName": "Doe",
          "hireDate": "Jan 15, 2008 12:00:00 AM",
          "title": "Architect",
          "salary": 8000000
        },
        {
          "firstName": "Jon",
          "lastName": "Anderson",
          "hireDate": "Mar 18, 2006 12:00:00 AM",
          "title": "Manager",
          "salary": 9000000
        }
      ]
    }