一种基于csv文件确定对象属性值的方法和装置制造方法

文档序号:6537256阅读:235来源:国知局
一种基于csv文件确定对象属性值的方法和装置制造方法
【专利摘要】本发明实施例公开了一种基于CSV文件确定对象属性值的方法和装置。该方法包括:为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息;解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存;确定所述对象中设置有注解信息的属性,解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。应用本发明实施例能够降低维护成本和出错概率。
【专利说明】—种基于CSV文件确定对象属性值的方法和装置
【技术领域】
[0001]本申请涉及计算机【技术领域】,尤其涉及一种基于CSV文件确定对象属性值的方法和装置。
【背景技术】
[0002]在现代软件开发过程中,不同应用程序之间面临数据交互的问题。逗号分隔值(CSV)文件因其格式简单,操作方便,成为越来越多应用程序首选的数据交换格式。目前已有很多成熟的框架解析与处理CSV文件,这极大简化了程序员的开发成本,使其可以专注于处理CSV文件内容和业务逻辑的映射关系,即,专注于基于CSV文件确定对象的属性值。
[0003]目前,一般基于硬编码方式实现CSV文件与对象属性值的映射,具体地:
[0004]用于处理业务的应用程序(下文称为业务处理类)根据CSV文件构造实体类,例如构造一个JAVA对象作为实体类,该实体类一般包括多个属性、以及每个属性对应的属性信息设置方法,其中,在属性对应的属性信息设置方法中直接显示地指明了要将CSV文件的哪一列的数值设置为该属性的属性值,业务处理类通过解析CSV文件,将CSV文件的每一行记录按逗号分隔,得到该行记录中每一列的数值,调用所述实体类中的属性信息设置方法,将该属性信息设置方法对应属性的属性值设置为该属性信息设置方法中指明的CSV文件中相应列的数值。
[0005]例如,对于CSV文件student.CSV,其文件格式为id, name, class, grade, school, sex, scorel, score2。应用程序读取该 CSV 文件中的每行记录,并将每一行记录转换为Java对象Student, java,该Java对象Student, java包括id, name, class, grade, school, sex, scorel和score2属性,并且,每个属性都有自己的属性信息设置方法。应用程序对读取到的每一行记录,按逗号分隔后,需要显示调用对应的属性信息设置方法,将CSV文件该行记录中各列的取值保存至所述Java对象的对应属性中。比如,对CSV文件的第一列数值,需要显示调用Student, setld (Integer id)方法设置id属性值,对于CSV文件的第二列数值,需要显示调用Student.setName (String name)方法设置name属性值;以此类推。
[0006]随着应用程序的演进,对于CSV文件,我们经常面临这样的问题:在原有列的基础上增加一新列,删除一个已有的列,修改某一列的数据类型(如将整形转为字符串类型)等等。面对上述变化,程序员需要仔细地将各列的取值映射到实体对象的相应属性中,比如,若新增加一列或删除一列,应用程序需要重新将不同列设置到不同属性上,因此,应用程序的代码几乎要全部更新,更新完成后还需要大量的验证工作以保障属性信息设置无误。如果面对的CSV文件列数较少,其维护成本相对较低;但对于字段数较多,且字段可能频繁变化的情况下,其维护成本及出错概率呈几何倍增长,且因人为疏忽造成错误的概率比较大,且某些错误可能很难发现,比如,错误地将scorel,score2列设置到不相符的属性上。

【发明内容】
[0007]有鉴于此,本发明提供了一种基于CSV文件确定对象属性值的方法和装置,能够降低维护成本和出错概率。
[0008]一种基于CSV文件确定对象属性值的方法,该方法包括:
[0009]为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息;
[0010]解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存;
[0011]确定所述对象中设置有注解信息的属性,解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
[0012]一种基于CSV文件确定对象属性值的装置,该装置包括注解模块、CSV文件解析模块、属性筛选模块和属性值设置模块;
[0013]所述注解模块,用于为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息;
[0014]所述CSV文件解析模块,用于解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存;
[0015]所述属性筛选模块,用于确定所述对象中设置有注解信息的属性;
[0016]所述属性值设置模块,用于解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
[0017]由上述技术方案可见,本发明实施例中,为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息,解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存,确定出所述对象中设置有注解信息的属性,解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
[0018]可见,由于本发明实施例是通过为属性设置注解信息,在注解信息中指明CSV文件中与该属性对应的列的序号信息,在设置该属性的属性值时,通过该属性的注解信息获知CSV文件的相应列号信息,将该列号对应的相应列元素的值设置为该属性的值,实现了以注解信息为媒介确定出对象的属性与CSV文件的列之间的映射关系,因此,当CSV文件的列发生变化导致所述映射关系发生变化时,只需要更改对象属性的注解信息即可,而不需要对应用程序的代码进行大规模的更新,因此,能够降低维护成本和出错概率。
【专利附图】

【附图说明】
[0019]图1是本发明实施例提供的基于CSV文件确定对象属性值的方法流程图。
[0020]图2是本发明实施例提供的基于CSV文件确定对象属性值的装置结构示意图。
【具体实施方式】
[0021]图1是本发明实施例提供的基于CSV文件确定对象属性值的方法流程图。[0022]如图1所示,该流程包括:
[0023]步骤101,为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息。
[0024]本步骤中,根据对象的属性与CSV文件的列之间的映射关系,为需要将其属性值映射为CSV文件中的某列取值的对象设置注解信息,通过该注解信息指明该属性与该CSV文件中的哪一列相对应,因此,当只有部分属性需要与CSV文件中的列进行映射时,只为该部分属性设置注解信息。
[0025]步骤102,解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存。
[0026]通常,可以根据解析结果将所述行记录中各列元素的数值保存在数组中。
[0027]步骤103,确定所述对象中设置有注解信息的属性。
[0028]通过本步骤,可以从对象的所有属性中筛选出设置有注解信息的属性。
[0029]步骤104,解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息。
[0030]步骤105,根据所述序号信息从所述数据结构中获取相应的元素。
[0031]步骤106,将该属性的值确定为该元素的值。
[0032]由图1所示方法可见,由于本发明实施例在注解信息中指明CSV文件中与该属性对应的列的序号信息,在设置该属性的属性值时,通过该属性的注解信息获知CSV文件的相应列号信息,将该列号对应的相应列元素的值设置为该属性的值,实现了以注解信息为媒介确定出对象的属性与CSV文件的列之间的映射关系,因此,当CSV文件的列发生变化导致所述映射关系发生变化时,只需要更改对象属性的注解信息即可,换言之,在所述CSV文件增加列、删除列或者调整列顺序时,只需要修改所述注解信息中CSV文件中与属性对应的列的序号信息即可,而不需要对应用程序的代码进行大规模的更新,因此,能够降低维护成本和出错概率。
[0033]本发明实施例对其实现所采用的程序语言不做限定,只要能够根据程序语言自身的特点实现图1所示方法中的各个步骤即可。
[0034]下面以采用java程序语言实现本发明实施例为例,对本发明实施例进行进一步地详细说明:
[0035]当采用java程序语言实现本发明实施例时,所述对象为Java对象,为了实现在Java运行时环境下,通过Java反射机制获得在源文件中定义的Java对象注解信息,本发明实施例提出:将所述注解信息的保留策略设置为运行时,即将该注解的保留策略定义为RetentionPolicy.RUNTIME ;将所述注解信息的作用目标设置为属性,即ElementType.FIELD。另外,关于在注解信息中指明属性与CSV文件中的哪一列相对应,具体可以通过在所述注解信息中增加一个注解属性(例如FIELD_INDEX属性)来实现,通过该注解属性来指明设置有该注解信息的Java对象属性所对应的CSV文件的列的序号。
[0036]当采用java程序语言实现本发明实施例时,可以通过Java反射机制确定出Java对象中设置有注解信息的属性,并将该属性的值设置为注解信息中指明的CSV文件中相应列元素的值,具体地:先通过Java反射机制遍历所述对象的所有属性,然后判断每个属性是否设置有注解信息,根据判断结果确定出所述对象中设置有注解信息的属性,对于设置有注解信息的属性,再通过Java反射机制获取该属性的数据类型,将CSV文件中相应列元素的值按照所述数据类型保存至该属性中。
[0037]其中,对于设置有注解信息的属性,即便CSV文件中列元素的数据类型发生了变化,或者对象属性的数据类型发生了变化,由于本发明实施例通过Java反射机制获取该属性的数据类型,将CSV文件中相应列元素的值按照所述数据类型保存至该属性中,因此,本发明实施例不需要修改程序代码就能够适应上述数据类型的变化,因此,能够降低维护成本和出错概率。
[0038]下面对采用java程序语言实现本发明实施例时,业务处理类的处理流程进行详细地说明:
[0039]业务处理类根据CSV文件构造一个JAVA对象作为实体类,该实体类包括多个属性,其中,在构造该JAVA对象时,需要为该JAVA对象中其属性值与CSV文件中的列相对应的Java属性设置注解信息,将该注解的保留策略定义为RetentionPolicy.RUNHMEjf该注解的作用目标设置为属性,即ElementType.FIELD,在Java对象属性的注解信息的FIELD_INDEX属性中指明该Java对象属性与CSV文件中的哪一列相对应。
[0040]业务处理类在根据所述CSV文件为所述JAVA对象设置属性值时,一方面,业务处理类解析CSV文件,将CSV文件的每一行记录按逗号分隔,得到该行记录中每一列的数值,将该行记录中各列的数值存储在预设的数据结构中,例如存储在数组中,另一方面,业务处理类通过Java反射机制获取所述Java对象的所有属性列表,然后业务处理类遍历该属性列表,判断每个属性是否设置有注解信息,如果设置有注解信息,则业务处理类获取该Java属性的注解信息,从所述注解信息中读取FIELD_INDEX属性的值,从而确定该Java属性与CSV文件中的哪一列相对应,业务处理类根据所述FIELD_INDEX属性的值从所述预设的数据结构中读取相应元素的值,业务处理类还通过Java反射机制获取该Java属性的属性值的数据类型信息,并通过Java反射机制将所述元素的值按照所述数据类型保存至该Java属性中。
[0041]根据本发明实施例提供的确定对象属性值的方法,本发明实施例还提供了一种基于CSV文件确定对象属性值的装置,具体请参见图2。
[0042]图2是本发明实施例提供的基于CSV文件确定对象属性值的装置结构示意图。
[0043]如图2所示,该装置包括注解模块201、CSV文件解析模块202、属性筛选模块203和属性值设置模块204。
[0044]注解模块201,用于为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息。
[0045]CSV文件解析模块202,用于解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存。其中,所述预设数据结构可以是数组,换言之,将所述行记录中各列元素的值保存在数组中。
[0046]属性筛选模块203,用于确定所述对象中设置有注解信息的属性。
[0047]属性值设置模块204,用于解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
[0048]其中,所述对象可以为Java对象;注解模块201,用于将所述注解信息的保留策略设置为运行时,将所述注解信息的作用目标设置为属性。[0049]属性筛选模块203,可以用于通过Java反射机制遍历所述对象的所有属性,判断每个属性是否设置有注解信息,根据判断结果确定出所述对象中设置有注解信息的属性。
[0050]属性值设置模块204,可以用于通过Java反射机制获取该属性的数据类型,将所述元素的值按照所述数据类型保存至该属性中。
[0051]注解模块201,可以用于在所述CSV文件增加列、删除列或者调整列顺序时,修改所述注解信息中CSV文件中与属性对应的列的序号信息。
[0052]可见,本发明实施例在对于需要解析CSV文件的应用中,通过注解的方式实现了将CSV文件和Java对象属性的映射关系,降低了通过硬编码方式维护映射关系的复杂度,提高了开发效率,同时降低了代码维护成本和出错概率。
[0053]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种基于CSV文件确定对象属性值的方法,其特征在于,该方法包括: 为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息; 解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存; 确定所述对象中设置有注解信息的属性,解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
2.根据权利要求1所述的方法,其特征在于,所述对象为Java对象;所述设置注解信息包括: 将所述注解信息的保留策略设置为运行时,将所述注解信息的作用目标设置为属性。
3.根据权利要求2所述的方法,其特征在于,确定所述对象中设置有注解信息的属性包括: 通过Java反射机制遍历所述对象的所有属性,判断每个属性是否设置有注解信息,根据判断结果确定出所述对象中设置有注解信息的属性; 将该属性的值确定为该元素的值包括: 通过Java反射机制获取该属性的数据类型,将所述元素的值按照所述数据类型保存至该属性中。
4.根据权利要求1所述的方法,其特征在于,所述预设数据结构包括数组。
5.根据权利要求1至4任一权利要求所述的方法,其特征在于,该方法还包括:在所述CSV文件增加列、删除列或者调整列顺序时,修改所述注解信息中CSV文件中与属性对应的列的序号信息。
6.一种基于CSV文件确定对象属性值的装置,其特征在于,该装置包括注解模块、CSV文件解析模块、属性筛选模块和属性值设置模块; 所述注解模块,用于为对象中的属性设置注解信息,所述注解信息包括CSV文件中与该属性对应的列的序号信息; 所述CSV文件解析模块,用于解析所述CSV文件中的行记录,根据解析结果将所述行记录中各列元素的数值按照预设数据结构进行保存; 所述属性筛选模块,用于确定所述对象中设置有注解信息的属性; 所述属性值设置模块,用于解析属性的注解信息得到与该属性对应的CSV文件中的列的序号信息,根据所述序号信息从所述数据结构中获取相应的元素,将该属性的值确定为该元素的值。
7.根据权利要求6所述的装置,其特征在于,所述对象为Java对象; 所述注解模块,用于将所述注解信息的保留策略设置为运行时,将所述注解信息的作用目标设置为属性。
8.根据权利要求6所述的装置,其特征在于, 所述属性筛选模块,用于通过Java反射机制遍历所述对象的所有属性,判断每个属性是否设置有注解信息,根据判断结果确定出所述对象中设置有注解信息的属性; 所述属性值设置模块,用于通过Java反射机制获取该属性的数据类型,将所述元素的值按照所述数据类型保存至该属性中。
9.根据权利要求6所述的装置,其特征在于,所述预设数据结构包括数组。
10.根据权利要求6至9任一权利要求所述的装置,其特征在于, 所述注解模块,用于在所述CSV文件增加列、删除列或者调整列顺序时,修改所述注解信息中CSV文件中与属性对应的列的序号信息。
【文档编号】G06F17/30GK103745010SQ201410041343
【公开日】2014年4月23日 申请日期:2014年1月28日 优先权日:2014年1月28日
【发明者】赵林虎, 周宁, 张国利, 胡俏芝 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1