一种XSD文件转换为JSON文件的方法与流程

文档序号:36910903发布日期:2024-02-02 21:39阅读:60来源:国知局
一种XSD文件转换为JSON文件的方法与流程

本发明涉及数据处理,特别涉及一种xsd文件转换为json文件的方法。


背景技术:

1、目前,随着大数据时代的蓬勃发展,大数据企业也将会遇到处理各式各样不同类型的数据的情况。因此,能否处理繁杂格式的数据,以及处理效率的高低也是企业一个能力的体现。xml是目前一种比较强大的,格式标准合乎规范的半结构化数据,因此很多企业使用xml文档来存储传输数据。而xsd文件则是xml文档的约束文件,它严格定义了xml文档的语义规则。通过xsd规则约束生成的xml文档,尽管内容可能不同,但结构是固定的,使用者仍然可以解析数据。但是xsd文件不方便阅读理解,前端开发者在解析xsd文件结构内容的时候也相当困难,而json数据解析简易。因此如何将复杂的xsd文件转化为容易处理的json文件就显得极为必要。目前市场上存在的几种将xsd文件转换为json文件的方法有:com.fasterxml.jackson.*、org.json.xml、jaxb和jackson。

2、但是以上几种方法都存在问题,就是生成的json文件结构太复杂,采用com.fasterxml.jackson.*转换生成的json文件结构并不比原xsd文件内容简单,外层element数组内含有的多个element除了必须的name属性以及可选的attribute属性外,还有一个ref字段用来指定其子element的名称。而我们需要的只有name名称以及attribute属性,而element之间的父子所属关系可以用json的从属结构来表示,不需要另外添加字段,所以jackson的转换结果很多都是冗余信息,而且若想解析还需要根据ref字段来进行判断,十分麻烦。采用org.json.xml转换生成的json文件增加了xmlns:xs 这个命名空间,但仅从结构上看,此方法与第一种方法几乎一样,只是冗余的数据会更多一点。jaxb和jackson不仅需要手动执行脚本命令,还需要手动修改多个结果java对象的内容,还需要自己判断多个java类的从属关系,然后可调用jackson包中的方法将构建的java类转json文件,因此jaxb和jackson操作过于繁杂。

3、因此,本发明提出一种xsd文件转换为json文件的方法。


技术实现思路

1、本发明提供一种xsd文件转换为json文件的方法,用以利用对xsd文件转换生成的复杂的临时json文件进行压缩优化,可以实现将xsd文件转换为json文件过程中生成的多重嵌套且包含很多无用字段的临时json文件中的无用属性删除,并在删除后将其压缩至只有一层,即高效、操作简单地生成结构更加简单、内容更加清晰、被解析时更加便捷的json文件。

2、本发明提供一种xsd文件转换为json文件的方法,包括:

3、s1:基于xsd文件路径和初始化后的filereader类,获得临时json文件;

4、s2:基于初始化后的jsonobject和临时json文件构建jsonarray,同时初始化临时jsonarray对象;

5、s3:基于优化json方法,提取出json对象中的name、element、attribute属性,获得经过优化的json对象;

6、s4:基于统一格式方法,将经过优化的json对象内部的指定字段全部转为数组格式,并将统一格式后的json对象都添加到临时jsonarray对象中;

7、s5:基于压缩方法,判断临时jsonarray对象中的json对象是否含有子元素,若是,则进行递归,直至找到最内部的子元素为止,基于递归寻找过程获得一层结构的json文件,否则,直接返回,并将临时jsonarray对象压缩为一层结构的json文件。

8、优选的,s1:基于xsd文件路径和初始化后的filereader类,获得临时json文件,包括:

9、s101:初始化filereader类,并将xsd文件路径带入至初始化后的filereader类,并将初始化后的filereader类中的filereader对象传入至初始化bufferedreader类;

10、s102:新建stringbuffer对象,调用bufferedreader类的readline方法,循环读值直到读取到的值为空为止,并将读取到的值追加到stringbuffer对象中;

11、s103:初始化xmlmapper类和objectmapper类,调用初始化后的xmlmapper的readvalue方法,将stringbuffer对象和object.class 传入至初始化后的xmlmapper类,获得中间对象,调用objectmapper对象的writevalueasstring方法,并将中间对象代入至writevalueasstring方法,获得临时json文件。

12、优选的,s2:基于初始化后的jsonobject和临时json文件构建jsonarray,同时初始化临时jsonarray对象,包括:

13、初始化jsonobject;

14、并将临时json文件传入至初始化jsonobject;

15、调用jsonobject 的getstring方法传入“element”获得element字符串;

16、通过传入element字符串构建jsonarray,同时初始化临时jsonarray对象。

17、优选的,s3:基于优化json方法,提取出json对象中的name、element、attribute属性,获得经过优化的json对象,包括:

18、初始化临时jsonarray对象;

19、遍历jsonarray,根据下标获取json对象;

20、基于优化json方法,提取出json对象中的name、element、attribute属性,获得经过优化的json对象。

21、优选的,基于优化json方法,提取出json对象中的name、element、attribute属性,获得经过优化的json对象,包括:

22、将初始化临时jsonarray对象后的临时json文件中的代码文本当作待提取代码文本;

23、确定出待提取代码文本中的所有种类的所有待定位字段,其中待定位字段包括:name、element、attribute;

24、基于待提取代码文本中包含的总行数和每行包含的代码字段总数,生成待提取代码文本的代码字段格局空矩阵;

25、基于每个种类的所有待定位字段在待提取代码文本中的所在行序数和所在列序数,确定出每个种类的所有待定位字段在代码字段格局空矩阵中的所有所在位置,并将每个种类的待定位字段对应的预设表征值填入至代码字段格局空矩阵中的对应所有所在位置,并将代码字段格局空矩阵中除当前确定出的所有所在位置以外剩余位置的矩阵元素设置为0,获得待提取代码文本的待提取字段格局分布矩阵;

26、基于待提取字段格局分布矩阵,在待提取代码文本中提取出每个种类的每个待定位字段的属性值字段;

27、将提取出的属性值字段与对应种类的待定位字段对应的属性种类进行对应,获得json对象中的name、element、attribute属性,并基于json对象中的name、element、attribute属性获得经过优化的json对象。

28、优选的,基于待提取字段格局分布矩阵,在待提取代码文本中提取出每个种类的每个待定位字段的属性值字段,包括:

29、确定出待提取字段格局分布矩阵和每种参考字段格局分布矩阵之间的相似度;

30、将最大相似度对应的参考字段格局分布矩阵中的每个种类的所有待定位字段与待提取字段格局分布矩阵中的每个种类的所有待定位字段进行一一对应,获得字段对应结果;

31、确定出参考字段格局分布矩阵中每个种类的每个待定位字段对应的属性值字段长度,并基于字段对应结果,确定出待提取字段格局分布矩阵中每个种类的每个待定位字段的属性值字段长度,并基于待提取字段格局分布矩阵中每个种类的每个待定位字段的属性值字段长度,在待提取代码文本中提取出每个种类的每个待定位字段的属性值字段。

32、优选的,s4:基于统一格式方法,将经过优化的json对象内部的指定字段全部转为数组格式,并将统一格式后的json对象都添加到临时jsonarray对象中,包括:

33、判断经过优化的json对象是否含有需要转换的name名称,若是,则通过getjsonobject方法获取json对象,基于最新获得的json对象再创建一个新的jsonarray;

34、通过jsonarray.put方法,传入下标0和json对象,再调用jsonobject.put方法传入name名称和jsonarray,将json对象内部的转换的name名称对应的指定字段全部转为数组格式,获得格式统一的json对象;

35、否则,将经过优化的json对象当作格式统一的json对象;

36、将格式统一的json对象全部添加到临时jsonarray对象中。

37、优选的,需要转换的name名称,包括但不限于element、attribute。

38、优选的,s5:基于压缩方法,判断临时jsonarray对象中的json对象是否含有子元素,若是,则进行递归,直至找到最内部的子元素为止,基于递归寻找过程获得一层结构的json文件,否则,直接返回,并将临时jsonarray对象压缩为一层结构的json文件,包括:

39、将临时jsonarray对象以及下标0传入压缩方法中,方法内部会根据下标获取json对象,并判断json对象中是否含有子element,若是,则获取子元素的名称,遍历临时jsonarray对象获取name名称与子元素的名称相匹配的jsonobject与其下标;

40、通过调用jsonobject.put方法,传入“element”以及已经带入jsonobject和下标的压缩方法,进行递归,直到找到最内部的元素为止,基于递归寻找过程获得一层结构的json文件;

41、否则,直接返回,并将临时jsonarray对象压缩为一层结构的json文件。

42、优选的,基于递归寻找过程获得一层结构的json文件,包括:

43、基于递归寻找过程中获得的子element,确定出临时jsonarray对象中的元素父子从属关系;

44、将利用从属结构表示元素父子从属关系,获得一层结构的json文件。

45、本发明相对于现有技术产生的有益效果为:利用对xsd文件转换生成的复杂的临时json文件进行压缩优化,可以实现将xsd文件转换为json文件过程中生成的多重嵌套且包含很多无用字段的临时json文件中的无用属性删除,并在删除后将其压缩至只有一层,即高效、操作简单地生成结构更加简单、内容更加清晰、被解析时更加便捷的json文件。

46、本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

47、下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1