CN111324577A - 一种Yml文件读写的方法及装置 - Google Patents

一种Yml文件读写的方法及装置 Download PDF

Info

Publication number
CN111324577A
CN111324577A CN201811544944.XA CN201811544944A CN111324577A CN 111324577 A CN111324577 A CN 111324577A CN 201811544944 A CN201811544944 A CN 201811544944A CN 111324577 A CN111324577 A CN 111324577A
Authority
CN
China
Prior art keywords
key
file
value
yml
data structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201811544944.XA
Other languages
English (en)
Other versions
CN111324577B (zh
Inventor
贺治国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Datang Mobile Communications Equipment Co Ltd
Original Assignee
Datang Mobile Communications Equipment Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Datang Mobile Communications Equipment Co Ltd filed Critical Datang Mobile Communications Equipment Co Ltd
Priority to CN201811544944.XA priority Critical patent/CN111324577B/zh
Publication of CN111324577A publication Critical patent/CN111324577A/zh
Application granted granted Critical
Publication of CN111324577B publication Critical patent/CN111324577B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种Yml文件读写的方法及装置,方法包括:根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key‑Value键值对;当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key‑Value键值对;将所述新的Key‑Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。本申请提供的方法解决了现有技术中读写Yml文件的方式通用性差的问题。

Description

一种Yml文件读写的方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种Yml文件读写的方法及装置。
背景技术
网管服务为了适应运营商云平台化新要求采用微服务架构开发,部署方式由单点集中部署转变为分布式部署,这样有利于网管服务“横向”扩充,以解决不断增加的处理压力。但是如果通过手动安装方式部署分布式微服务***,由于部署点多,人工安装耗时费力且容易出现错误,所以比较难实现。为了解决手动安装所带来的问题,需要一款“自动化部署工具”来实现一键式部署。以下是现有技术中,基于微服务架构的特点提供的几种实现自动化部署的方法,具体包括:
由于Yml(Yet Another Markup Language,仍是一种置标语言)文件较Properties文件层次感强,所以采用Spring Boot微服务架构的网管服务中大量使用Yml文件作为配置数据文件,例如数据库连接信息的Yml文件,可以是:
Spring:
Datasource:
Type:com.alibaba.druid.pool.DruidDataSource
Ur1:jdbc:mariadb://$dbip:3306/$dbname?useUni
Driver-class-name:org.mariadb.jdbc.Driver
Username:$user
Password:$pass
自动化部署工具在部署时必须更新替换其中的动态参数,比如“数据库IP地址、数据库名称、用户名和密码”等。
而在网管微服务中类似的Yml文件数量和类型还很多,一键式微服务部署过程中需要替换这些不同类型的Yml文件配置参数,因此自动化部署工具需要解决多态型Yml文件通用读写方法问题。
方式一,在纯Java语言编程中对于Yml文件的读写需要借助JYaml组件实现,通过JYaml组件的Yaml.loadType()方法可以将Yml文件内容加载为类对象,例如:
Entry entry=Yaml.loadType(new File(”ymlfile.yml”).Entry.class)
其中,“ymlfile.yml”为Java工程中类路径下一个Yml文件,Entry.class为该Yml文件对应的JavaBean对象,如果要将更改后的属性值持久化到ymlfile.yml"文件中,可以通过Yaml.dump()实现。通过此方法,前述数据库连接信息的Yml文件的application.yml文件就可以转化为下图1所示的JavaBean对象Application实体类,通过get、set方法就可以读取或更改属性值。
方式二,而在使用Spring Boot平台加载数据库连接信息的Yml文件则更加方便,只需要在图1所示的JavaBean对象DataSource类名上增加注解@ConfigurationProperties(prefix="spring.datasource")即可,然后Spring Boot平台自动完成JavaBean成员属性的赋值,这种办法必须保证Yml文件关键字与JavaBean对象成员变量名称保持一致,否则必须在JavaBean对象类的成员属性上增加@Value注解,将Yml文件关键字与成员变量进行一一捆绑。
自动化部署工具如果采用JYaml组件自动化部署微服务需要编写大量的JavaBean对象,但是往往被部署的微服务数量和类型不确定,所以自动化部署工具不可能将它们依赖的所有Yml文件匹配为指定的JavaBean对象,基于现实场景,所以虽然JYaml开源组件可以满足自动化部署工具“读写Yml文件”的需求,但是通用性很差,只适合对于特定Yml文件的读写操作。
发明内容
本申请提供一种Yml文件读写的方法及装置,用以解决现有技术中读写Yml文件的方式通用性差技术问题。
第一方面,本申请提供一种Yml文件读写的方法,包括:
根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对;
将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
本申请实施例所提供的方法是基于Yml文件的语法规则将Yml文件转化为便于操作的Key-Value键值对滞后在进行后续读写操作,所以具有“通用性”高的优点,并且可以解析所有遵循Yaml语法规则的Yml文件,避免了编写大量的与Yml文件对应的JavaBean模型,节省了大量的人力物力。
在一种可选的实现方式中,所述根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构包括:
逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
虽然Yml文件具有清晰的层级关系,相对于Properties文件可读性更高,但是程序无法正确识别这种层级关系。因此本申请实施例将Yml文件转化为多叉树类型的内存数据结构,后可以采用深度优先递归遍历法遍历多叉树查找叶子节点并读写其值,从而完成对Yml文件的读写,很好的解决了读写Yml文件层级关系复杂的问题。
在一种可选的实现方式中,所述采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对包括:
从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;
将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
在一种可选的实现方式中,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中包括:
顺序遍历所述Key-Value键值对获取散列对象的key和赋值;
将Key以所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
第二方面,提供一种Yml文件读写的装置,包括:
第一转化模块,用于根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
第二转化模块,用于采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
还原模块,用于当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
在一种可选的实现方式中,所述第一转化模块,具体用于逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
在一种可选的实现方式中,第二转化模块,具体用于从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
在一种可选的实现方式中,还原模块,具体用于顺序遍历所述Key-Value键值对获取散列对象的key和赋值;将Key以基于所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
第三方面,提供一种用户终端,包括:
存储器,用于存储处理器所执行的指令;
处理器,用于执行存储器中存储的指令执行第一方面中任一项所述的方法。
第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行第一方面中任一项所述的方法。
附图说明
图1为现有技术中application.yml文件对应的JavaBean对象示意图;
图2为现有技术中application.yml文件对应的多叉树的示意图;
图3为本申请实施例所提供的Yml文件读写方法的简易流程图示意图;
图4为本申请实施例所提供的Yml文件读写方法的流程图示意图;
图5为本申请实施例中多叉树链表数据结构示意图;
图6为本申请实施例中多叉树链表将转化为Key-Value键值对后的示意图;
图7为本申请实施例中还原LinkedHashMap的方法流程示意图;
图8为本申请实施例中一种Yml文件读写的装置的结构示意图。
具体实施方式
在现有技术中,JYaml(是YAML的Java实现,是一款用于将Yml文件解析为JavaBean对象的开源组件)开源组件和Spring Boot微服务开发平台对于Yml文件的读取都提供了较完善的解决方案,将“Yml文件构建为JavaBean对象”是二者共同点。区别在于JYaml开源组件对Yml文件的访问是“读写”模式,既可以通过JavaBean读取Yml文件内容也可以将更新后的JavaBean对象持久化到Yml文件中,而Spring Boot平台对Yml文件的访问只能是“只读”模式。由此可见,虽然JYaml开源组件可以满足自动化部署工具“读写Yml文件”的需求,但是通用性很差,只适合对于特定Yml文件的读写操作。
针对上述问题,申请提供一种Yml文件读写的方法,该方法包括:
根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对;
将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
本申请实施例所提供的方法是基于Yml文件的语法规则将Yml文件转化为便于操作的Key-Value键值对滞后在进行后续读写操作,所以具有“通用性”高的优点,并且可以解析所有遵循Yaml语法规则的Yml文件,避免了编写大量的与Yml文件对应的JavaBean模型,节省了大量的人力物力。
由Yml文件的语法规则可见,Yml文件所包括内容都是左对齐的,以每一行的缩进说明行与行之间内容的层级关系,上一层级较下一层级所对应行在Yml文件中每一行内容最左端的左空格多至少1个空格,最深层级冒号(:)右侧为配置数据。同时最深层级数量大于2,扩展此文件内容可以存在多个二级层级或顶级层级,而且层级关系可以无限延伸,因此基于Yml文件的语法规则可以确定:Yml文件的结构与“多叉树”结构基本一致,可以将Yml文件理解为一棵或多棵“多叉树”,则前述数据库连接信息的Yml文件对应可以转化为如图2所示的一棵多叉树。
由图2可见Yml文件的顶级元素为多叉树树根节点深度为0,第二层级深度为1,依次类推,配置数据(value)对应叶子节点,如果当Yml文件顶级元素大于1时就构成了“多叉树森林”。该实施例中将Yml文件转化为多叉树类型的内存数据结构,进而通过遍历多叉树查找叶子节点并读写其值,从而完成对Yml文件的读写,最后刷新的多叉树重新持久化到Yml文件。
本申请实施例的整体思路是:首先构建多叉树内存数据结构,然后采用“深度优先递归算法”遍历多叉树,并将该多叉树转化为Key-Value键值对,通过Key值访问Key-Value键值对并对Value值作读写操作,最后采用“坐标对应算法”将Key-Value键值对转化为Yml文件内存字符串(StringBuffer对象)后持久化到Yml文件中(概述流程如图3所示)。
以下结合附图和具体的应用场景对本申请实施例所提供的方法和装置做进一步详细的说明:
如图4所示,本申请实施例提供一种Yml文件读写的方法,该方法可以包括以下实现步骤:
步骤401,根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
因为Yml文件每一行所对应的层级关系以及内容都不同,所以在将Yml文件转化为多叉树数据结构的时,可以逐行确定Yml文件的内容,然后形成多叉树数据结构,具体实现可以是:
逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
在具体的实施例中,多叉树模型的内存数据结构设计为链表(LinkedList),表元素存储树节点对象(TreeNode),表头元素为树根节点,其他表元素为树枝或树叶节点。多叉树树节点对象如表1所示,每个树节点包括“节点名称,父节点名称,节点深度,节点属性值”等字段,节点深度表示该节点距离树根节点的长度,节点属性值一般只有叶子节点非空。
表1
Figure BDA0001909113550000081
构建多叉树是遍历多叉树的前提条件,构建多叉树链表的过程就是创建TreeNode对象并存储于链表的过程。在构建过程中需要逐行读取Yml文件并计算每一行最左端空格数量除以设定数值(该实施例中该设定数值是基于Yml文件的语法规则确定的,即根据Yml文件层与层之间空格的差距确定;该实施例中该设定数值可以是2)的倍数,过程描述如下(假设Yml行左空格为2的整数倍):
A1,当倍数=0时,构建行内容为“树根节点”并存储到表头。
A2,当倍数=1时,构建行内容为“深度=1,父亲为根节点”的树枝节点并添加到多叉树链表的表尾。
A3,当倍数=2时,构建行内容为“深度=2,父亲为距离表尾最近且深度=1”的树枝节点并添加到多叉树链表的表尾;同理当倍数>1时,构建行内容为“深度=倍数,父亲为距离表尾最近且深度=倍数-1”的树枝节点并到添加到多叉树链表的表尾。
循环A2和A3过程步骤一直到Yml文件的行末结束,在此过程中如果行内容中属性值非空,则该节点为“叶子节点”,叶子节点TreeNode的value值非空,其他节点value值为空。当再次出现倍数=0的情况表明第一棵树构建完成开始构建新树,从而单个Yml文件被解析为多棵多叉树。通过上述构建过程图2的多叉树在内存中的链表结构如图5所示,链表中的○代表一个TreeNode对象,外层的有向箭头代表节点间的祖孙关系。
步骤402,采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
该实施例中,步骤402具体实现的时候可以是:
从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;
将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
其中,构建多叉树完成后即可采用“深度优先递归算法”遍历多叉树链表,递归过程描述如下:从表头取出第一个元素,按照深度优先的原则先找出第一个孩子节点,孩子节点再找出第一个孙子节点直到叶子节点为止,至此第一次深度遍历结束,其他节点标注“已遍历”;然后重新递归调用,从表头开始搜索“存在未遍历路径”的节点开始第二次深度遍历,当链表中所有节点均为“已遍历”时递归结束。
遍历多叉树的目的在于将多叉树转化为到Key-Value键值对这种简单数据结构,方便对多叉树叶子节点Value值修改。在上述整个的递归过程中非叶子节点Name值使用点号(“.”)连接为一个字符串作为Key-Value键值对的Key,叶子节点value值作为Key-Value键值对的Value值,最后存储于Key-Value键值对中。由此算法,图6多叉树链表将转化为如下的Key-Value键值对:
基于本申请实施例所提供的Key-Value键值对结构可以通过步骤403和步骤404对Key-Value键值对进行修改调整(在该实施例中步骤403和步骤404为分必要步骤),具体可以是:
步骤403,当需要对所述Yml文件中至少一个JavaBean对象成员的赋值进行修改时,确定所述至少一个JavaBean对象成员对应的至少一个Key值;
步骤404,基于所述至少一个Key值访问所述Key-Value键值对,并对所述至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对;
步骤405,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
在该实施例中,步骤405的具体实现步骤可以包括:
顺序遍历所述Key-Value键值对获取散列对象的key和赋值;
将Key以基于所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
该实施例中,基于Key-Value键值对还原Yml文件的具体实现可以是:
多叉树递归遍历时为了确保散列元素按照“先进先出”有序排列,采用LinkedHashMap有序散列表对象作为Key-Value键值对的物理内存结构,这样就可以保证Key-Value键值对被还原为原始的Yml文件。还原LinkedHashMap的具体实现步骤包括(如图7所示):
B1,顺序遍历Key-Value键值对获取第一个散列对象的key和value值。
B2,Key值以点号“.”为分割符转化为数组。由Key-Value键值对构建过程可知,该数组元素为多叉树非叶子节点,下标为节点深度,将该数组称之为“路径数组”。
B3,遍历路径数组,每个数组元素左侧增加“2*下标”个左空格,当value值=null时,数组元素右侧增加单冒号+单空格,否则数组元素右侧增加单冒号+value值。
B4,重新遍历路径数组,每个元素增加“换行符”后追加到StringBuffer(可变长度字符串缓存)对象中,重复元素直接跳过。
B5,确定是否完成整个LinkedHashMap对象的遍历,如果没有完成,则转入步骤B1继续遍历Key-Value键值;如果完成则形成完整StringBuffer对象,该对象为Yml文件内容在内存中的写照。
B6,最后通过Java语言的IO操作将StringBuffer对象写入到Yml文件中,在B3步骤中增加一定数量的左空格目的在于还原Yml文件的缩进格式。
本申请实施例所提供的方法是基于Yml文件的语法规则将Yml文件转化为便于操作的Key-Value键值对滞后在进行后续读写操作,所以具有“通用性”高的优点,并且可以解析所有遵循Yaml语法规则的Yml文件,避免了编写大量的与Yml文件对应的JavaBean模型,节省了大量的人力物力。
虽然Yml文件具有清晰的层级关系,相对于Properties文件可读性更高,但是程序无法正确识别这种层级关系。因此本申请实施例将Yml文件转化为多叉树类型的内存数据结构,后可以采用深度优先递归遍历法遍历多叉树查找叶子节点并读写其值,从而完成对Yml文件的读写,很好的解决了读写Yml文件层级关系复杂的问题。
另外,本申请实施例所提供的方法中,将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对,然后如果需要对JavaBean对象成员的值进行修改,则可以通过key关键字修改Key-Value键值对的Value值安全可靠,间接性的实现Yml文件配置数据值的准确读写。
如图8所示,本申请实施例还提供一种Yml文件读写的装置,该装置具体可以包括:
第一转化模块801,用于根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
其中,该第一转化模块,具体用于逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
第二转化模块802,用于采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
其中,该第二转化模块,具体用于从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
还原模块805,用于当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
其中,修改Key-Value键值对的方式可以是:需要对所述Yml文件中至少一个JavaBean对象成员的赋值进行修改时,确定所述至少一个JavaBean对象成员对应的至少一个Key值;基于所述至少一个Key值访问所述Key-Value键值对,并对至少一个Key值对应的至少一个赋值进行修改。
该还原模块,具体用于顺序遍历所述Key-Value键值对获取散列对象的key和赋值;将Key以基于所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
本申请实施例还提供另一种用户终端,用于执行前述各个实施例中的Yml文件读写的方法,该用户终端包括至少一个处理器(例如CPU),至少一个网络接口或者其他通信接口,存储器,和至少一个通信总线,用于实现这些装置之间的连接通信。处理器用于执行存储器中存储的可执行模块,例如计算机程序。存储器可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口(可以是有线或者无线)实现该***网关与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
在一些实施方式中,存储器存储了程序,程序可以被处理器执行,实现图4所描述的方法。
基于同一发明构思,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行本申请图4所述的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种Yml文件读写的方法,其特征在于,包括:
根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对;
将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
2.如权利要求1所述的方法,其特征在于,所述根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构包括:
逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
3.如权利要求2所述的方法,其特征在于,所述采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对包括:
从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;
将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
4.如权利要求3所述的方法,其特征在于,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中包括:
顺序遍历所述Key-Value键值对获取散列对象的key和赋值;
将Key以所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
5.一种Yml文件读写的装置,其特征在于,包括:
第一转化模块,用于根据Yml文件的语法规则,将所述Yml文件转化为多叉树内存数据结构;
第二转化模块,用于采用深度优先递归算法遍历所述多叉树内存数据结构,并将所述Yml文件中的JavaBean对象成员以及JavaBean对象成员对应的赋值转化为Key-Value键值对;
还原模块,用于当对至少一个Key值对应的至少一个赋值进行修改,得到新的Key-Value键值对,将所述新的Key-Value键值对转化为Yml文件内存字符串后持久化到Yml文件中。
6.如权利要求5所述的装置,其特征在于,所述第一转化模块,具体用于逐行读取所述Yml文件,根据Yml文件的语法规则将所述Yml文件的每一行作为多叉树内存数据结构的一个节点添加到所述多叉树内存数据结构中,所述Yml文件中行与行之间的层级关系对应所述多叉树内存数据结构中每棵数据树的节点与节点之间的关系,并且每棵数据树的叶子节点为所述JavaBean对象成员;所述叶子节点的赋值非空,其他节点赋值为空。
7.如权利要求6所述的装置,其特征在于,第二转化模块,具体用于从所述多叉树内存数据结构中取出第一个元素,按照深度优先的原则遍历所述第一元素下的下一级子节点直至叶子节点;将遍历过程中非叶子节点Name值以一个设定符号连接为一个字符串作为所述Key-Value键值对的Key,叶子节点的赋值作为所述Key-Value键值对的赋值,形成所述Key-Value键值对。
8.如权利要求7所述的装置,其特征在于,还原模块,具体用于顺序遍历所述Key-Value键值对获取散列对象的key和赋值;将Key以基于所述设定符号分割符转化为数组,基于所述数组转化将散列对象的赋值持久化到Yml文件中;其中,所述数组标示所述Key按照所述设定符号分割符后的字符以及字符与字符之间的关系。
9.一种用户终端,其特征在于,包括:
存储器,用于存储处理器所执行的指令;
处理器,用于执行存储器中存储的指令执行权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行权利要求1-4中任一项所述的方法。
CN201811544944.XA 2018-12-17 2018-12-17 一种Yml文件读写的方法及装置 Active CN111324577B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811544944.XA CN111324577B (zh) 2018-12-17 2018-12-17 一种Yml文件读写的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811544944.XA CN111324577B (zh) 2018-12-17 2018-12-17 一种Yml文件读写的方法及装置

Publications (2)

Publication Number Publication Date
CN111324577A true CN111324577A (zh) 2020-06-23
CN111324577B CN111324577B (zh) 2023-11-17

Family

ID=71172441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811544944.XA Active CN111324577B (zh) 2018-12-17 2018-12-17 一种Yml文件读写的方法及装置

Country Status (1)

Country Link
CN (1) CN111324577B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112069129A (zh) * 2020-09-18 2020-12-11 浪潮云信息技术股份公司 基于国产cpu的配置文件格式转换方法、装置及介质
CN112069788A (zh) * 2020-09-10 2020-12-11 杭州安恒信息技术股份有限公司 一种yaml文件解析方法、装置、设备及存储介质
CN112256351A (zh) * 2020-10-26 2021-01-22 卫宁健康科技集团股份有限公司 Feign组件的实现方法、微服务调用方法及装置
CN112328256A (zh) * 2020-11-19 2021-02-05 四川创智联恒科技有限公司 一种自动生成结构体解析器源代码的方法
CN112527804A (zh) * 2021-01-27 2021-03-19 中智关爱通(南京)信息科技有限公司 文件存储方法、文件读取方法和数据存储***
CN113536762A (zh) * 2021-07-15 2021-10-22 中国工商银行股份有限公司 Json文本的比对方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100049729A1 (en) * 2003-12-22 2010-02-25 David Robert Black Transforming a hierarchical data structure according to requirements specified in a transformation template
US20160335299A1 (en) * 2015-05-11 2016-11-17 Apple Inc. Hierarchical Data Storage
CN106874358A (zh) * 2016-12-28 2017-06-20 曙光信息产业(北京)有限公司 一种文件管理方法和装置
CN108733689A (zh) * 2017-04-18 2018-11-02 北京京东尚科信息技术有限公司 一种json文本的比对方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100049729A1 (en) * 2003-12-22 2010-02-25 David Robert Black Transforming a hierarchical data structure according to requirements specified in a transformation template
US20160335299A1 (en) * 2015-05-11 2016-11-17 Apple Inc. Hierarchical Data Storage
CN106874358A (zh) * 2016-12-28 2017-06-20 曙光信息产业(北京)有限公司 一种文件管理方法和装置
CN108733689A (zh) * 2017-04-18 2018-11-02 北京京东尚科信息技术有限公司 一种json文本的比对方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MALIN ERIKSSON 等: "Comparison between JSON and YAML for data serialization", BACHELOR’S THESIS IN COMPUTER SCIENCE (15 ECTS CREDITS) AT THE SCHOOL OF COMPUTER SCIENCE AND ENGINEERING ROYAL INSTITUTE OF TECHNOLOGY YEAR 2011 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112069788A (zh) * 2020-09-10 2020-12-11 杭州安恒信息技术股份有限公司 一种yaml文件解析方法、装置、设备及存储介质
CN112069129A (zh) * 2020-09-18 2020-12-11 浪潮云信息技术股份公司 基于国产cpu的配置文件格式转换方法、装置及介质
CN112069129B (zh) * 2020-09-18 2024-01-19 浪潮云信息技术股份公司 基于国产cpu的配置文件格式转换方法、装置及介质
CN112256351A (zh) * 2020-10-26 2021-01-22 卫宁健康科技集团股份有限公司 Feign组件的实现方法、微服务调用方法及装置
CN112256351B (zh) * 2020-10-26 2023-11-17 卫宁健康科技集团股份有限公司 Feign组件的实现方法、微服务调用方法及装置
CN112328256A (zh) * 2020-11-19 2021-02-05 四川创智联恒科技有限公司 一种自动生成结构体解析器源代码的方法
CN112328256B (zh) * 2020-11-19 2023-04-25 四川创智联恒科技有限公司 一种自动生成结构体解析器源代码的方法
CN112527804A (zh) * 2021-01-27 2021-03-19 中智关爱通(南京)信息科技有限公司 文件存储方法、文件读取方法和数据存储***
CN113536762A (zh) * 2021-07-15 2021-10-22 中国工商银行股份有限公司 Json文本的比对方法及装置

Also Published As

Publication number Publication date
CN111324577B (zh) 2023-11-17

Similar Documents

Publication Publication Date Title
CN111324577B (zh) 一种Yml文件读写的方法及装置
CN109343857B (zh) 线上部署机器学习模型的方法、设备和存储介质
CN110309196A (zh) 区块链数据存储和查询方法、装置、设备及存储介质
US9870382B2 (en) Data encoding and corresponding data structure
CN105786808B (zh) 一种用于分布式执行关系型计算指令的方法与设备
US9734149B2 (en) Clustering repetitive structure of asynchronous web application content
US10904316B2 (en) Data processing method and apparatus in service-oriented architecture system, and the service-oriented architecture system
KR20220011134A (ko) 가시화 방법 및 관련 기기
CN110109681B (zh) 不同平台间代码的转换方法及***
CN104102701B (zh) 一种基于hive的历史数据存档与查询方法
CN106873952B (zh) 移动端网页开发的数据处理***和方法、及应用装置
CN114491172B (zh) 树形结构节点的快速检索方法、装置、设备及存储介质
CN108197187B (zh) 查询语句的优化方法、装置、存储介质和计算机设备
US20180075074A1 (en) Apparatus and method to correct index tree data added to existing index tree data
Mishra et al. Modern tools and current trends in web-development
CN107239568B (zh) 分布式索引实现方法及装置
US11327746B2 (en) Reduced processing loads via selective validation specifications
US11675772B2 (en) Updating attributes in data
CN106293862B (zh) 一种可扩展标记语言xml数据的解析方法和装置
JP7131119B2 (ja) ソースアプリケーションからのソースデータをターゲットアプリケーションのターゲットデータへとマージするためのシステムおよび方法
US20160149794A1 (en) Automatic network routing engine agnostic of underlying inventory or network management system
US20150172131A1 (en) Method and system for verifying quality of server
CN115455006A (zh) 数据处理方法、数据处理装置、电子设备及存储介质
CN109948018B (zh) 一种Web结构化数据快速提取方法及***
CN110222105B (zh) 数据汇总处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant