CN111061482B - 字符串中参数的解析方法、装置、存储介质及电子设备 - Google Patents
字符串中参数的解析方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111061482B CN111061482B CN201911015658.9A CN201911015658A CN111061482B CN 111061482 B CN111061482 B CN 111061482B CN 201911015658 A CN201911015658 A CN 201911015658A CN 111061482 B CN111061482 B CN 111061482B
- Authority
- CN
- China
- Prior art keywords
- character string
- path node
- analysis
- analyzed
- target
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000004458 analytical method Methods 0.000 claims abstract description 253
- 238000000605 extraction Methods 0.000 claims description 7
- 238000006467 substitution reaction Methods 0.000 claims description 6
- 235000008694 Humulus lupulus Nutrition 0.000 claims 1
- 230000007704 transition Effects 0.000 claims 1
- 238000005516 engineering process Methods 0.000 abstract description 2
- 230000009471 action Effects 0.000 description 43
- 238000006243 chemical reaction Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本申请公开了一种字符串中参数的解析方法、装置、存储介质及电子设备,涉及字符串解析技术。具体方案包括:获取待解析字符串与参数路径;根据参数路径确定路径节点集;基于路径节点集,确定至少一个目标路径节点;根据每个目标路径节点,基于待解析字符串确定解析值,直至遍历路径节点集,将确定得到的最后一个解析值作为目标参数。可以在未知待解析字符串结构的情况下,对待解析字符串中的目标参数进行解析和提取,具有通用性,可以大大提高对待解析字符串的解析效率。
Description
技术领域
本申请涉及字符串解析技术,特别是涉及一种字符串中参数的解析方法、装置、存储介质及电子设备。
背景技术
JS对象简谱(JavaScript Object Notation,JSON)是一种轻量级的数据交换格式,采用完全独立的文本格式的编程语言来存储和表示数据。
业内现有的对JSON字符串进行解析的通用工具,都是针对JSON字符串的语法进行解析的。目前没有在未知JSON字符串结构的情况下,对JSON字符串中的目标参数进行解析和提取的工具。现有技术是采用针对不同的目标参数和JSON字符串结构,分别开发不同的工具获取目标参数的。现有技术中JSON字符串作为待解析字符串时,待解析字符串中参数的解析方法没有通用性,解析效率低下。
发明内容
有鉴于此,本申请的主要目的在于提供一种字符串中参数的解析方法,该方法可以在未知待解析字符串结构的情况下,对待解析字符串中的目标参数进行解析和提取,具有通用性,可以大大提高对待解析字符串的解析效率。
为了达到上述目的,本申请提出的技术方案为:
第一方面,本申请实施例提供了一种字符串中参数的解析方法,包括以下步骤:
获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置;
根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点;
基于所述路径节点集,确定至少一个目标路径节点,并判断能否根据所述目标路径节点对所述待解析字符串进行解析;
当能够进行解析时,根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串。
一种可能的实施方式中,所述基于所述路径节点集,确定至少一个目标路径节点的步骤之后,所述基于所述待解析字符串确定解析值的步骤之前,所述方法还包括:
判断能否根据所述目标路径节点对所述待解析字符串进行解析;
当不能进行解析时,生成并显示错误信息。
一种可能的实施方式中,所述根据每个所述目标路径节点,基于所述待解析字符串确定解析值的步骤,包括:
建立解析值栈,将所述待解析字符串加入所述解析值栈中;
获取所述解析值栈的栈顶元素,根据每个所述目标路径节点和所述栈顶元素确定所述解析值,并将所述解析值加入所述解析值栈的栈顶;所述栈顶元素为所述解析值栈的栈顶的解析值;
返回获取所述解析值栈的栈顶元素的步骤,直至达到预设停止条件。
一种可能的实施方式中,所述预设停止条件为:
遍历所述路径节点集;
或者,判定不能根据所述目标路径节点对所述待解析字符串进行解析。
一种可能的实施方式中,所述基于所述路径节点集,确定至少一个目标路径节点的步骤,包括:
从预设状态机的初态开始,根据所述路径节点集进行状态跳转,直至预设解析状态;
根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点。
一种可能的实施方式中,所述根据所述路径节点集进行状态跳转的步骤,包括:
判断所述预设状态机的当前状态是否是预设解析状态;
当所述当前状态不是预设解析状态时,依序获取所述路径节点集中的当前路径节点;
根据所述当前路径节点和所述当前状态,确定预设状态机的下一状态;
将所述下一状态作为当前状态,返回判断所述预设状态机的当前状态是否是预设解析状态的步骤。
一种可能的实施方式中,所述根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点的步骤之后,所述方法还包括:
判断是否遍历所述路径节点集,当未遍历所述路径节点集时,返回所述从预设状态机的初态开始,依次根据所述路径节点进行状态跳转的步骤。
一种可能的实施方式中,所述根据每个所述目标路径节点和所述栈顶元素确定所述解析值的步骤,包括:
获取所述栈顶元素,并将所述栈顶元素作为当前解析字符串;
依次获取每个所述目标路径节点作为当前目标路径节点,确定所述当前目标路径节点在所述当前解析字符串中的作用区域,并基于所述当前解析字符串确定所述作用区域中的子字符串;
根据所述当前目标路径节点的数据类型,将所述作用区域中的子字符串转换为预设数据格式,并使用格式转换后的子字符串更新所述当前解析字符串;
判断是否遍历每个所述目标路径节点;
当未遍历每个所述目标路径节点时,回到所述依次获取每个所述目标路径节点作为当前目标路径节点的步骤;
当遍历每个所述目标路径节点时,将更新后的所述当前解析字符串确定为所述解析值。
一种可能的实施方式中,所述当前目标路径节点的数据类型包括:分隔符和字符串;
所述根据所述当前目标路径节点的数据类型,将所述作用区域中的子字符串转换为预设数据格式的步骤包括:
当所述当前目标路径节点的数据类型为所述分隔符时,根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换;
当所述当前目标路径节点为字符串时,不根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换。
一种可能的实施方式中,所述确定所述当前目标路径节点在所述当前解析字符串中的作用区域的步骤,包括:
从所述当前解析字符串中确定与所述当前目标路径节点的字符内容相同且解析层级相同子字符串作为关键字符串,将所述关键字符串的作用区域作为所述当前目标路径节点在所述当前解析字符串中的作用区域。
一种可能的实施方式中,所述从所述当前解析字符串中确定与所述当前目标路径节点的字符内容相同且解析层级相同子字符串作为关键字符串的步骤之前,所述方法还包括确定与所述当前目标路径节点的解析层级相同的子字符串的步骤:
当所述当前目标路径节点的数据类型为所述分隔符时,将所述当前解析字符串的第一个字符确定为与所述当前目标路径节点的解析层级相同的子字符串;
当所述当前目标路径节点的数据类型为所述字符串时,根据所述当前解析字符串的数据格式和所述预设解析状态,确定与所述当前目标路径节点的解析层级相同的子字符串。
一种可能的实施方式中,所述将确定得到的最后一个解析值作为所述目标参数的步骤之后,所述方法还包括:
显示所述目标参数。
一种可能的实施方式中,所述将确定得到的最后一个解析值作为所述目标参数的步骤之后,所述方法还包括:
获取替代参数;
使用所述替代参数替换所述目标参数,生成并显示替换参数后的待解析字符串。
一种可能的实施方式中,所述使用所述替代参数替换所述目标参数,生成并显示替换参数后的待解析字符串的步骤包括:
获取所述解析值栈顶的栈顶元素,根据所述替代参数和所述栈顶元素,生成中间字符串;
判断是否遍历所述解析值栈的每个元素;
当未遍历所述解析值栈的每个元素时,获取所述解析值栈顶的栈顶元素,根据所述中间字符串和所述栈顶元素,更新所述中间字符串,并返回判断是否遍历所述解析值栈的每个元素的步骤;
当遍历所述解析值栈的每个元素时,将生成的最后一个中间字符串,确定为替换参数后的待解析字符串。
第二方面,本申请实施例还提供一种字符串中参数的解析装置,包括:
获取模块,用于获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置;
路径确定模块,用于根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点;
目标节点确定模块,用于基于所述路径节点集,确定至少一个目标路径节点;
解析模块,用于根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串。
第三方面,本申请实施例还提供一种计算机可读存储介质,可以在未知待解析字符串结构的情况下,对待解析字符串中的目标参数进行解析和提取。具体方案为:
一种计算机可读存储介质,存储有计算机指令,所述指令被处理器执行时可实现上述第一方面及第一方面中任一种可能的实施方式的步骤。
第四方面,本申请实施例还提供一种电子设备,可以在未知待解析字符串结构的情况下,对待解析字符串中的目标参数进行解析和提取。具体方案为:
一种电子设备,该电子设备包括上述的计算机可读存储介质,还包括可执行所述计算机可读存储介质的处理器。
综上所述,本申请提出的一种字符串中参数的解析方法、装置、存储介质及电子设备。本申请获取待解析字符串,这里,待解析字符串通常为JSON字符串。之后,根据获取的参数路径确定按照解析层级排列的路径节点集,并根据路径节点对待解析字符串进行解析,确定待解析字符串中的子字符串作为解析值,当遍历路径节点集后,将得到的最后一个解析值作为目标参数。本申请只需按照解析顺序设定好参数路径,就可以在无需得知待解析字符串的结构的情况下,完成目标参数的解析和提取,具有较高的迁移性和通用性,可大大提高对待解析字符串的解析效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种字符串中参数的解析方法的流程示意图;
图2为本申请实施例提供的另一种字符串中参数的解析方法的流程示意图;
图3为本申请实施例提供的一种预设状态机的状态跳转示意图;
图4为根据目标路径节点确定解析值的流程示意图;
图5为本申请实施例提供的一种字符串中参数的解析装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例,例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
本申请的核心发明点在于:根据获取的参数路径确定按照解析层级排列的路径节点集,并根据路径节点对待解析字符串进行解析,确定待解析字符串中的子字符串作为解析值,当遍历路径节点集后,将得到的最后一个解析值作为目标参数。本申请只需按照解析顺序设定好参数路径,就可以在无需得知待解析字符串的结构的情况下,完成目标参数的解析和提取,具有较高的迁移性和通用性,可大大提高对待解析字符串的解析效率。进一步的,本申请在解析确定目标参数之后,可以将目标参数显示出来,也可以获取替代参数,并使用替代参数替换目标参数,可以方便的完成参数替换过程,在提高待解析字符串的解析效率的同时,提升了待解析字符串的编辑效率。
为使本申请的目的、技术方案和优点更加清楚,下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
实施例一
图1为本申请实施例提供的一种字符串中参数的解析方法的流程示意图,如图1所示,该实施例主要包括:
S101:获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置。
本申请实施例主要针对JSON程序语言进行解析,JSON程序语言是以文本格式进行编写的,因此,每句JSON程序语言为一个字符串,具体的,获取的待解析字符串为JSON程序语言的字符串。
为了解析和提取目标参数,需要获知目标参数在待解析字符串中的位置,本申请实施例获取参数路径来确定目标参数在待解析字符串中的位置。获取的参数路径也可以是字符串格式的。参数路径中包含了目标参数在所述待解析字符串中的位置信息。
S102:根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点。
由于JSON程序语言是使用结构化、层次化的字符串来存储和表示参数数据的。由于JSON程序语言层次化的语法结构,无法仅凭借目标参数的参数名称信息,直接从待解析字符串中获取目标参数。因此,参数路径中一般需要包含目标参数在待解析字符串中的详细位置信息,参数路径包含的位置信息包含了确定目标参数所需的每个解析层级的位置信息,为了按照解析层级对待解析字符串进行有序解析,需要先根据参数路径确定路径节点集,路径节点集中包含的至少一个路径节点用于记录目标参数的解析路径。路径节点为一个字符串,字符串中包含了至少一个字符。路径节点集中的每个路径节点按照解析层级的顺序排列,根据路径节点集中的每个路径节点,依次对待解析字符串进行解析,可以逐层级地从待解析字符串中确定出目标参数。
S103:基于所述路径节点集,确定至少一个目标路径节点。
基于路径节点集对待解析字符串进行解析时,依次根据每个路径节点对待解析字符串进行解析。目标路径节点为当前用于对待解析字符串进行解析的路径节点,是依照解析层级顺序依次从路径节点集中确定的。
S104:根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串。
目标参数及目标参数的参数路径存在于待解析字符串中,可以基于待解析字符串确定目标参数,此时,根据每个目标路径节点分别待解析字符串进行解析,基于待解析字符串确定解析值。这里解析值是根据目标路径节点对待解析字符串进行解析的解析结果,对待解析字符串进行解析的解析结果是待解析字符串中的子字符串,进一步的,目标参数也是待解析字符串中的子字符串。当遍历路径节点集时,由于路径节点集中的路径节点按照解析层级排列,因此,最后一个目标路径节点为与目标参数的解析层级相同的路径节点,根据最后一个目标路径节点对待解析字符串进行解析后,得到的解析值就是目标参数。
本申请实施例只需按照解析顺序设定好参数路径,就可以在无需得知待解析字符串的结构的情况下,完成目标参数的解析和提取,具有较高的迁移性和通用性,可大大提高对待解析字符串的解析效率。
实施例二
如图2所示,本申请实施例还提供另一种字符串中参数的解析方法,包括:
S201:获取待解析字符串与参数路径。
获取待解析字符串和参数路径。这里,本申请实施例获取的待解析字符串通常为JSON程序语言的字符串。示例性的,获取到的待解析字符串为:“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”。
参数路径通常也是一个字符串,用于确定目标参数在所述待解析字符串中的位置。示例性的,假设从上述待解析字符串中确定并提取目标参数startDate的参数值时,按照参数路径需要按照解析层级包含目标参数完整的位置信息,因此,获取的参数路径为“{fitter[{dim=copcode,value{startDate”。
S202:根据所述参数路径确定路径节点集。
根据参数路径确定路径节点集的过程,是将参数路径拆解开来,每个单元字符串作为一个路径节点,将每个路径节点依序加入路径节点集中。
具体的,依次获取参数路径的每个字符,并判断获取到的字符的数据类型;当获取到的字符的数据类型为分隔符时,将获取到的字符直接作为一个路径节点加入路径节点集中;当获取到的字符的数据类型为字符串时,将获取到的字符拼接到中间字符中,继续获取下一个字符,并将下一个字符也拼接到中间字符中,直至获取的下一个字符的数据类型为分隔符,或者遍历参数路径的每个字符为止。按照这一过程,可以根据上述示例中的参数路径,上述示例的参数路径中,数据类型为分隔符的字符包括“{”、“[”、“=”和“,”,其余字符的数据类型为字符串,因此,确定得到的路径节点集为:[“{”、“fitter”、“[”、“{”、“dim”、“=”、“copcode”、“,”、“value”、“{”、“startDate”]。
S203:基于所述路径节点集,确定至少一个目标路径节点。
对待解析字符串进行解析,需要根据路径节点按照解析层级有序进行,因此,首选从路径节点集中确定至少一个目标路径节点,使用目标路径节点对待解析字符串进行解析。
一种可能的实施方式中,可以根据预设状态机确定至少一个目标路径节点。具体的,从预设状态机的初态开始,根据所述路径节点集进行状态跳转,直至预设解析状态;根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点。这里,预设解析状态为一轮预设状态机状态跳转的终态,示例性的,预设状态机的状态跳转流程为:判断所述预设状态机的当前状态是否是预设解析状态;当所述当前状态不是预设解析状态时,依序获取所述路径节点集中的当前路径节点;根据所述当前路径节点和所述当前状态,确定预设状态机的下一状态;将所述下一状态作为当前状态,返回判断所述预设状态机的当前状态是否是预设解析状态的步骤。当预设状态机的当前状态是预设解析状态,也就是状态机跳转到预设解析状态时,将状态跳转过程中获取的每个路径节点确定为至少一个目标路径节点。
当预设状态机跳转到预设解析状态之后,可以结束目标路径节点的确定过程,也可以判断是否遍历路径节点集,如果未遍历路径节点集,说明对待解析字符串的解析并未完成,此时,返回从预设状态机的初态开始,依次根据所述路径节点进行状态跳转的步骤。循环进行预设状态机的状态跳转并在状态跳转过程中确定目标路径节点,直至遍历路径节点集。
示例性的,可以建立如图3所示的预设状态机,假设确定得到的路径节点集为:[“{”、“fitter”、“[”、“{”、“dim”、“=”、“copcode”、“,”、“value”、“{”、“startDate”],根据如图3所示的预设状态机确定目标路径节点,图3中的终态1、终态2和终态3为预设解析状态。图3所示的三种终态及三种终态的跳转路径可以对应JSON程序语言的三种语法模型,对于JSON程序语言来说,通常每个JSON字符串可以总结为三种语法模型,如表1所示为三种语法模型的示例。
表1:JSON程序语言的三种语法模型
对于第一种语法模型,通常根据给定的参数路径“{key”,进行状态跳转,并得到终态1为预设解析状态,经过对待解析字符串的解析可以确定得到目标参数"value"。对于第二种语法模型,通常根据给定的参数路径“[{key”,进行状态跳转,并得到终态2为预设解析状态,经过对待解析字符串的解析可以确定得到目标参数"value"和"value2"。第三种语法模型,通常根据给定的参数路径“[{keyName=key,valueName“,进行状态跳转,并得到终态3为预设解析状态,经过对待解析字符串的解析可以确定得到目标参数"value"。
当状态跳转到预设解析状态时,如果未能遍历路径节点集,可以跳回初态继续进行状态跳转,因此三种语法模型可以进一步进行组合,配置符合需求的参数路径。利用上述三种语法模型的组合,可以基本覆盖JSON程序语言的所有语法结构。
具体的,首先获取预设状态机的当前状态,在流程的一开始,预设状态机的当前状态为初态,由于预设状态机的当前状态为初态,因此,当前状态不是预设解析状态,此时,获取路径节点集中第一个节点作为当前路径节点,根据当前路径节点“{”和当前状态,可以确定预设状态机的下一状态为状态A。此时将下一状态作为当前状态,也就是将状态A作为当前状态,返回判断所述预设状态机的当前状态是否是预设解析状态的步骤,由于状态A不是预设解析状态,因此,依序获取路径节点集中的第二个节点作为当前路径节点。根据当前路径节点“fitter”和当前状态进行状态跳转。由于当前路径节点为字符串型的路径节点,且当前状态为状态A,因此,可以得到下一个状态为状态B。由于状态B不是预设解析状态,因此,获取路径节点集中的下一个路径节点“[”,根据图3所示的预设状态机,无论此时路径节点为何字符,均会由状态B跳转到终态1,并且由于终态1为预设解析状态,因此,根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定目标路径节点为“{”和“fitter”。
S204:判断能否根据所述目标路径节点对所述待解析字符串进行解析。
为了避免解析过程中出现错误,例如出现目标参数不存在于待解析字符串中的情况,因此需要判断能否根据所述目标路径节点对所述待解析字符串进行解析。当能够进行解析时,目标参数及目标参数的参数路径存在于待解析字符串中,可以基于待解析字符串确定目标参数,执行步骤S206;反之,目标参数或目标参数的参数路径不存在于待解析字符串中,无法基于待解析字符串确定目标参数,执行步骤S205。
S205:生成并显示错误信息。
生成错误信息,提示目标参数或目标参数的参数路径不存在于待解析字符串中,提醒更换目标参数、目标参数的参数路径或待解析字符串。
S206:根据每个所述目标路径节点,基于所述待解析字符串确定解析值。
为了对待解析字符串进行有序有层次的解析,在一种可能的实施方式中,可以使用解析值栈存储解析值。由于解析值栈先入后出的特性,无需管理存入解析值栈的解析值的取出顺序,位于解析值栈栈顶的解析值,即为最接近目标参数的解析层级的解析值。具体的,可以采用如图4所示的步骤根据每个所述目标路径节点,基于所述待解析字符串确定解析值:
S401:建立解析值栈,将所述待解析字符串加入所述解析值栈中。
建立解析值栈,将待解析字符串作为第一个元素加入解析值栈中。
S402:获取所述解析值栈的栈顶元素,根据每个所述目标路径节点和所述栈顶元素确定所述解析值,并将所述解析值加入所述解析值栈的栈顶;所述栈顶元素为所述解析值栈的栈顶的解析值。
具体的,当获取到解析值栈的栈顶元素时,将栈顶元素作为当前解析字符串。使用每个目标路径节点对当前解析字符串进行解析,依次获取每个目标路径节点作为当前目标路径节点,也就是将当前获取的那个目标路径节点作为当前目标路径节点,使用当前目标路径节点对当前解析字符串进行解析。具体的,使用下述步骤1至步骤6确定根据每个所述目标路径节点和所述栈顶元素确定所述解析值:
步骤1、获取所述栈顶元素,并将所述栈顶元素作为当前解析字符串。
步骤2、依次获取每个所述目标路径节点作为当前目标路径节点,确定所述当前目标路径节点在所述当前解析字符串中的作用区域,并基于所述当前解析字符串确定所述作用区域中的子字符串。
当前目标路径节点对当前解析字符串进行解析的过程为,确定当前目标路径节点在当前解析字符串中的作用区域。在具体实施时,对当前目标路径节点的作用区域的确定,需要从当前解析字符串中确定与当前目标路径节点字符内容相同且解析层级相同的子字符串作为关键字符串。确定与当前目标路径节点解析层级相同的子字符串的过程,需要根据当前目标路径节点的数据类型确定。
当前目标路径节点的数据类型包括:分隔符和字符串。当所述当前目标路径节点的数据类型为所述分隔符时,将所述当前解析字符串的第一个字符确定为与所述当前目标路径节点的解析层级相同的子字符串;当所述当前目标路径节点的数据类型为所述字符串时,根据所述当前解析字符串的数据格式和所述预设解析状态,确定与所述当前目标路径节点的解析层级相同的子字符串。确定得到关键字符串后,将关键字符串的作用区域作为所述当前目标路径节点在所述当前解析字符串中的作用区域。
示例性的,获取的待解析字符串为“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”,那么在建立解析值栈之后,将待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”加入解析值栈中。此时,解析值栈中只有一个待解析字符串,因此,栈顶元素为待解析字符串,获取栈顶元素作为当前解析字符串时,当前解析字符串为“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”。在步骤S203中,经过预设状态机的第一次状态跳转,可以确定目标路径节点为“{”和“fitter”。依次获取目标路径节点作为当前目标路径节点,第一获取的当前目标路径节点为“{”。根据当前目标路径节点的数据类型确定关键字符串,当前目标路径节点“{”的类型为分隔符,因此,将当前解析字符串的第一个字符确定为与所述当前目标路径节点的解析层级相同的子字符串,当前解析字符串的第一个字符为“{”,因此,与当前目标路径节点的解析层级相同的子字符串为“{”,由于与当前目标路径节点的解析层级相同的子字符串与当前目标路径节点字符内容也相同,因此“{”为关键字符串,关键字符串“{”的作用区域为当前目标路径节点在所述当前解析字符串中的作用区域。当关键字符串为“{”时,作用区域为关键字符串前大括号“{”开始,至与关键字符串解析层级相同的后大括号“}”位置,关键字符串“{”的作用区域为“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}],因此,当前目标路径节点的作用区域为““fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”,基于当前解析字符串,可以确定作用区域中的子字符串为““fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”。
步骤3、根据所述当前目标路径节点的数据类型,将所述作用区域中的子字符串转换为预设数据格式,并使用格式转换后的子字符串更新所述当前解析字符串。
当前目标路径节点的数据类型包括:分隔符和字符串。当所述当前目标路径节点的数据类型为所述分隔符时,根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换;当所述当前目标路径节点为字符串时,不根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换。
对作用区域中的子字符串进行格式转换时,转换的预设数据格式根据当前目标路径节点确定,例如,当前目标路径节点为大括号时,预设数据格式为字典格式,当前目标路径节点为中括号时,预设数据格式为列表格式等。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,当前目标路径节点为“{”时,当前目标路径节点的数据类型为分隔符,此时,对作用区域中的子字符串进行格式转换,由于当前目标路径节点为分隔符“{”,将作用区域中的子字符串““fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”转换为字典格式。得到的格式转换后的子字符串为字典格式的,字典的键为fitter,字典的值为[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]。使用格式转换后的子字符串更新所述当前解析字符串,因此当前解析字符串被更新为字典格式的字符串,字典的键为fitter,字典的值为[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]。
步骤4、判断是否遍历每个所述目标路径节点。
一轮状态机跳转确定得到的每个目标路径节点均需要用于进行解析,因此判断是否遍历每个路径节点,当未遍历每个目标路径节点时,执行步骤5;当遍历了每个目标路径节点时,执行步骤6。
步骤5、当未遍历每个所述目标路径节点时,回到所述依次获取每个所述目标路径节点作为当前目标路径节点的步骤。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,当对当前目标路径节点“{”进行解析后,可以确定未遍历每个目标路径节点,此时需要回到依次获取每个所述目标路径节点作为当前目标路径节点,将下一个目标路径节点“fitter”作为当前目标路径节点。此时,根据当前目标路径节点的数据类型确定关键字符串,当前目标路径节点“fitter”的类型为字符串,根据所述当前解析字符串的数据格式和所述预设解析状态,确定与所述当前目标路径节点的解析层级相同的子字符串。当前解析字符串为字典格式的字符串,且确定目标路径节点时,状态机达到的预设解析状态为终态1,因此,根据当前解析字符串的数据格式,将该字典格式的字符串的字典的键确定为与所述当前目标路径节点的解析层级相同的子字符串。本示例中,字典格式的当前解析字符串的字典的键只有一个为“fitter”,且与当前目标路径节点的字符内容相同,因此将“fitter”确定为关键字符串。当当前解析字符串的字典的键有两个以上时,将与当前目标路径节点的字符内容相同的字典的键确定为关键字符串。将“fitter”确定为关键字符串后,将关键字符串的作用区域作为所述当前目标路径节点在所述当前解析字符串中的作用区域。关键字符串“fitter”为字典格式的当前解析字符串的字典的键,其作用区域为字典格式的当前解析字符串的字典的值,因此,关键字符串的作用区域为当前解析字符串的字典的值:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}],基于所述当前解析字符串确定所述作用区域中的子字符串为“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”。
并且,由于当所述当前目标路径节点为字符串时,不根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换。因此,使用子字符串“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”更新当前解析字符串。
步骤6、当遍历每个所述目标路径节点时,将更新后的所述当前解析字符串确定为所述解析值。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,当对当前目标路径节点“fitter”进行解析后,可以确定已遍历每个目标路径节点,此时将更新后的当前解析字符串“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”,确定为解析值,因此,确定得到的解析值为“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”。
确定解析值“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”后,将解析值加入解析值栈的栈顶。
S403:判断是否达到预设停止条件。
当未达到预设停止条件时,返回获取所述解析值栈的栈顶元素的步骤,直至达到预设停止条件。当达到预设停止条件时,流程结束
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,此时返回获取解析值栈的栈顶元素的步骤,获取到的栈顶元素为解析值“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”。
在具体实施时,预设停止条件可以为:遍历所述路径节点集;或者,判定不能根据所述目标路径节点对所述待解析字符串进行解析。当遍历路径节点集时,将确定得到的最后一个解析值作为所述目标参数。当判定不能根据所述目标路径节点对所述待解析字符串进行解析时,生成并显示错误信息。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,由于完成确定解析值“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”的步骤后,并未遍历路径节点集,因此,回到获取所述解析值栈的栈顶元素的步骤,继续根据每个所述目标路径节点和所述栈顶元素确定所述解析值。仍然使用预设状态机的状态跳转,经过如图3所示的预设状态机,可以最终得到终态3作为预设解析状态,并且得到用于驱动状态跳转的路径节点包括“[”、“{”、“dim”、“=”、“copcode”、“,”和“value”,之后,根据每个所述目标路径节点,基于所述待解析字符串确定解析值,首先将目标路径节点“[”确定为当前目标路径节点,并将栈顶元素“[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]”作为当前解析字符串,根据当前目标路径节点和当前解析字符串,可以确定当前目标路径节点在当前解析字符串中的作用区域,具体的确定当前解析字符串中的关键字符串为当前解析字符串中的第一个字符“[”,之后将关键字符串前中括号“[”和与上述前中括号解析层级相同的后中括号之间的字符串确定为作用区域,获取作用区域中的子字符串为“{“dim”:“copcode”,“value”:{“startDate”:“201904”}}”,根据当前目标路径节点的数据类型,将所述作用区域中的子字符串转换为预设数据格式,由于当前目标路径节点为“[”,将作用区域中的子字符串转换为列表格式。之后将格式转换后的列表格式的子字符串更新所述当前解析字符串。由于未遍历每个目标路径节点,获取下一个目标路径节点根据“{”作为当前目标路径节点,并获取当前解析字符串列表格式的“{“dim”:“copcode”,“value”:{“startDate”:“201904”}}”,根据当前目标路径节点和当前解析字符串进行上述步骤的解析。直至最后一个目标路径节点“value”为当前目标路径节点进行解析后,得到解析值{“startDate”:“201904”},并将解析值{“startDate”:“201904”}加入解析值栈中。由于此时仍未遍历路径节点集,还需再迭代执行获取解析值栈的栈顶元素{“startDate”:“201904”}作为当前解析字符串,确定得到目标路径节点“{”和“startDate”,之后依次根据每个目标路径节点对当前解析字符串进行解析的过程,直至得到解析值“201904”。由上述示例可知,确定得到的每个解析值,都是待解析字符串中的子字符串。
S207:直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”来说,当得到解析值“201904”时,已经遍历了路径节点集中的每个节点,此时可以将确定得到的最后一个解析值“201904”作为所述目标参数。
为了进一步明确路径节点集的结束,方便预设状态机的状态跳转过程的判断已对路径节点集进行了遍历,可以在路径节点集的最后加入结束标识节点,例如,加入了结束标识节点的路径节点集为[“{”、“fitter”、“[”、“{”、“dim”、“=”、“copcode”、“,”、“value”、“{”、“startDate”、“EOF”],其中“EOF”为结束标识节点。
当获取到结束标识节点“EOF”时,表明已遍历路径节点集,将确定得到的最后一个解析值作为目标参数。
在确定了目标参数后,可以执行步骤S208,也可以执行步骤S209。
S208:显示所述目标参数。
当执行本申请实施例提供的字符串中参数的解析方法的目的为获取目标参数时,将获取到的目标参数显示出来。示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”和参数路径“{fitter[{dim=copcode,value{startDate”来说,将目标参数“201904”显示出来。
S209:获取替代参数;使用所述替代参数替换所述目标参数,生成并显示替换参数后的待解析字符串。
当执行本申请实施例提供的字符串中参数的解析方法的目的为替换目标参数时,首选需要获取替代参数,这里,替代参数为对目标参数进行替换时,需要得到的替换结果,替换参数也通常是字符串形式的。示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”和参数路径“{fitter[{dim=copcode,value{startDate”来说,假设要将目标参数“201904”替换为“201906”,此时获取的替换参数为“201906”,需要生成并显示的替换参数后的待解析字符串为“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}]}”。
具体的,可以采用下述步骤I至步骤IV进行目标参数的替换:
步骤I:获取所述解析值栈顶的栈顶元素,根据所述替代参数和所述栈顶元素,生成中间字符串。
首先获取栈顶元素,示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”和参数路径“{fitter[{dim=copcode,value{startDate”来说,经过一系列的解析操作,解析值栈中的元素包括[“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”、[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]、{“startDate”:“201904”}、“201904”],依次获取栈顶元素,进行目标参数的替换。使用替代参数替代栈顶元素中的目标参数,生成中间字符串。当获取的栈顶元素为“201904”时,使用替代参数替代栈顶元素中的目标参数,可以生成中间字符串“201906”。
步骤II:判断是否遍历所述解析值栈的每个元素。
步骤III:当未遍历所述解析值栈的每个元素时,获取所述解析值栈顶的栈顶元素,根据所述中间字符串和所述栈顶元素,更新所述中间字符串,并返回判断是否遍历所述解析值栈的每个元素的步骤。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”和参数路径“{fitter[{dim=copcode,value{startDate”来说,使用替代参数替代栈顶元素中的目标参数,生成中间字符串“201906”之后,并未遍历所述解析值栈的每个元素,此时,继续获取的栈顶元素为{“startDate”:“201904”},根据中间字符串“201906”和栈顶元素{“startDate”:“201904”},将中间字符串更新为{“startDate”:“201906”},返回判断是否遍历所述解析值栈的每个元素的步骤,并迭代执行根据中间字符串和栈顶元素,更新中间字符串的步骤,依次执行获取栈顶元素[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}],更新中间字符串[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}],以及获取栈顶元素“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”,更新中间字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}]}”的步骤。
具体的,为了正确的将进行中间字符串的更新,在解析值栈的基础上,建立操作栈,在操作栈中记录了每次对当前解析字符串的操作,从而协助中间字符串准确地对栈顶元素进行替换。示例性的,可以将每个目标路径节点作为元素压入栈顶元素中,利用栈的先入后出的特性,依次获取操作栈的栈顶元素,可以确定经过了何种解析过程得到的解析值栈的栈顶元素,从而准确地进行字符串的替换。
步骤IV:当遍历所述解析值栈的每个元素时,将生成的最后一个中间字符串,确定为替换参数后的待解析字符串。
示例性的,对于获取到的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201904”}}]}”和参数路径“{fitter[{dim=copcode,value{startDate”来说,当遍历所述解析值栈的每个元素时,最后一个生成的中间字符串为“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}]}”。因此,将“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}]}”确定为替换参数后的待解析字符串。
最后,显示替换参数后的待解析字符串“{“fitter”:[{“dim”:“copcode”,“value”:{“startDate”:“201906”}}]}”。
本申请实施例在无需得知待解析字符串的结构的情况下,完成目标参数的解析和提取,具有较高的迁移性和通用性,可大大提高对待解析字符串的解析效率。
基于相同的设计构思,本申请实施例还提供一种字符串中参数的解析装置、存储介质及电子设备。
实施例三
如图5所示,本申请实施例还提供了一种字符串中参数的解析装置500,包括:
获取模块501,用于获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置;
路径确定模块502,用于根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点;
目标节点确定模块503,用于基于所述路径节点集,确定至少一个目标路径节点;
解析模块504,用于根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串。
一种可能的实施方式中,字符串中参数的解析装置500,还包括:
判断模块505,用于判断能否根据所述目标路径节点对所述待解析字符串进行解析;
显示模块506,用于当不能进行解析时,生成并显示错误信息。
一种可能的实施方式中,解析模块504,还用于:
建立解析值栈,将所述待解析字符串加入所述解析值栈中;
获取所述解析值栈的栈顶元素,根据每个所述目标路径节点和所述栈顶元素确定所述解析值,并将所述解析值加入所述解析值栈的栈顶;所述栈顶元素为所述解析值栈的栈顶的解析值;
返回获取所述解析值栈的栈顶元素的步骤,直至达到预设停止条件。
一种可能的实施方式中,所述预设停止条件为:
遍历所述路径节点集;
或者,判定不能根据所述目标路径节点对所述待解析字符串进行解析。
一种可能的实施方式中,目标节点确定模块503,还用于:
从预设状态机的初态开始,根据所述路径节点集进行状态跳转,直至预设解析状态;
根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点。
一种可能的实施方式中,目标节点确定模块503,还用于:
判断所述预设状态机的当前状态是否是预设解析状态;
当所述当前状态不是预设解析状态时,依序获取所述路径节点集中的当前路径节点;
根据所述当前路径节点和所述当前状态,确定预设状态机的下一状态;
将所述下一状态作为当前状态,返回判断所述预设状态机的当前状态是否是预设解析状态的步骤。
一种可能的实施方式中,目标节点确定模块503,还用于:
判断是否遍历所述路径节点集,当未遍历所述路径节点集时,返回所述从预设状态机的初态开始,依次根据所述路径节点进行状态跳转的步骤。
一种可能的实施方式中,解析模块504,还用于:
获取所述栈顶元素,并将所述栈顶元素作为当前解析字符串;
依次获取每个所述目标路径节点作为当前目标路径节点,确定所述当前目标路径节点在所述当前解析字符串中的作用区域,并基于所述当前解析字符串确定所述作用区域中的子字符串;
根据所述当前目标路径节点的数据类型,将所述作用区域中的子字符串转换为预设数据格式,并使用格式转换后的子字符串更新所述当前解析字符串;
判断是否遍历每个所述目标路径节点;
当未遍历每个所述目标路径节点时,回到所述依次获取每个所述目标路径节点作为当前目标路径节点的步骤;
当遍历每个所述目标路径节点时,将更新后的所述当前解析字符串确定为所述解析值。
一种可能的实施方式中,所述当前目标路径节点的数据类型包括:分隔符和字符串;
解析模块504,还用于:
当所述当前目标路径节点的数据类型为所述分隔符时,根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换;
当所述当前目标路径节点为字符串时,不根据所述当前目标路径节点对所述作用区域中的子字符串进行格式转换。
一种可能的实施方式中,解析模块504,还用于:
从所述当前解析字符串中确定与所述当前目标路径节点的字符内容相同且解析层级相同子字符串作为关键字符串,将所述关键字符串的作用区域作为所述当前目标路径节点在所述当前解析字符串中的作用区域。
一种可能的实施方式中,解析模块504,还用于:
当所述当前目标路径节点的数据类型为所述分隔符时,将所述当前解析字符串的第一个字符确定为与所述当前目标路径节点的解析层级相同的子字符串;
当所述当前目标路径节点的数据类型为所述字符串时,根据所述当前解析字符串的数据格式和所述预设解析状态,确定与所述当前目标路径节点的解析层级相同的子字符串。
一种可能的实施方式中,显示模块506,还用于:
显示所述目标参数。
一种可能的实施方式中,字符串中参数的解析装置500,还包括::
替换模块507,用于获取替代参数;使用所述替代参数替换所述目标参数,生成替换参数后的待解析字符串;
显示模块506,还用于显示替换参数后的待解析字符串。
一种可能的实施方式中,替换模块507,还用于:
获取所述解析值栈顶的栈顶元素,根据所述替代参数和所述栈顶元素,生成中间字符串;
判断是否遍历所述解析值栈的每个元素;
当未遍历所述解析值栈的每个元素时,获取所述解析值栈顶的栈顶元素,根据所述中间字符串和所述栈顶元素,更新所述中间字符串,并返回判断是否遍历所述解析值栈的每个元素的步骤;
当遍历所述解析值栈的每个元素时,将生成的最后一个中间字符串,确定为替换参数后的待解析字符串。
实施例四
一种计算机可读介质,所述计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行本申请实施例提供的任一种字符串中参数的解析方法的步骤。实际应用中,所述的计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的,也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或多个程序被执行时,实现根据参考本申请实施例提供的任一种字符串中参数的解析装置进行本申请实施例提供的任一种字符串中参数的解析方法的步骤。
根据本申请公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合,但不用于限制本申请保护的范围。在本申请公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本申请所述的方法步骤除了可以用数据处理程序来实现,还可以由硬件来实现,例如,可以由逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器和嵌微控制器等来实现。因此这种可以实现本申请所述方法的硬件也可以构成本申请。
实施例五
本申请实施例还提供一种电子设备,可以是计算机或服务器,其中可以集成本申请实施例提供的任一种字符串中参数的解析装置。如图6所示,其示出了本申请实施例提供的电子设备600。
该电子设备可以包括一个或者一个以上处理核心的处理器601、一个或一个以上计算机可读存储介质602。该电子设备还可以包括电源603、输入输出单元604。本领域技术人员可以理解,图6中并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中:
处理器601是该电子设备的控制部分,利用各种接口和线路连接各个部分,通过运行或执行存储在计算机可读存储介质602中的软件程序,执行本申请实施例提供的任一种字符串中参数的解析方法的步骤。
计算机可读存储介质602可用于存储软件程序,即本申请实施例提供的任一种字符串中参数的解析方法中涉及的程序。
处理器601通过运行存储在计算机可读存储介质602的软件程序,从而执行各种功能应用以及数据处理。计算机可读存储介质602可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据电子设备需要使用的数据等。此外,计算机可读存储介质602可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,计算机可读存储介质602还可以包括存储器控制器,以提供处理器601对计算机可读存储介质602的访问。
电子设备还包括给各个部件供电的电源603,优选的,电源603可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源603还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该服务器还可包括输入输出单元604,比如可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入;比如可用于显示由用户输入的信息或提供给用户的信息以及服务器的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。
本申请实施例提供的任一种字符串中参数的解析方法、装置、存储介质及电子设备均基于相同的设计构思,并且本申请任一个实施例中的技术手段可以进行自由组合,组合得到的技术手段仍在本申请的保护范围之内。
本申请附图中的流程图和框图,示出了按照本申请公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标准的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本申请中。特别地,在不脱离本申请精神和教导的情况下,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本申请公开的范围。
本申请中应用了具体实施例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思路,并不用于限制本申请。对于本领域的技术人员来说,可以依据本申请的思路、精神和原则,在具体实施方式及应用范围上进行改变,其所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (9)
1.一种字符串中参数的解析方法,其特征在于,包括:
获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置;
根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点;
基于所述路径节点集,确定至少一个目标路径节点;
根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串,以实现在未知所述待解析字符串结构时,对所述待解析字符串中的所述目标参数的解析及提取;
所述根据每个所述目标路径节点,基于所述待解析字符串确定解析值的步骤,包括:
建立解析值栈,将所述待解析字符串加入所述解析值栈中;
获取所述解析值栈的栈顶元素,根据每个所述目标路径节点和所述栈顶元素确定所述解析值,并将所述解析值加入所述解析值栈的栈顶;所述栈顶元素为所述解析值栈的栈顶的解析值;
返回获取所述解析值栈的栈顶元素的步骤,直至达到预设停止条件。
2.根据权利要求1所述的方法,其特征在于,所述预设停止条件为:
遍历所述路径节点集;
或者,判定不能根据所述目标路径节点对所述待解析字符串进行解析。
3.根据权利要求1所述的方法,其特征在于,所述基于所述路径节点集,确定至少一个目标路径节点的步骤,包括:
从预设状态机的初态开始,根据所述路径节点集进行状态跳转,直至预设解析状态;
根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点。
4.根据权利要求3所述的方法,其特征在于,所述根据所述路径节点集进行状态跳转的步骤,包括:
判断所述预设状态机的当前状态是否是预设解析状态;
当所述当前状态不是预设解析状态时,依序获取所述路径节点集中的当前路径节点;
根据所述当前路径节点和所述当前状态,确定预设状态机的下一状态;
将所述下一状态作为当前状态,返回判断所述预设状态机的当前状态是否是预设解析状态的步骤。
5.根据权利要求3所述的方法,其特征在于,所述根据用于在所述初态与所述预设解析状态之间进行状态跳转的每个所述路径节点,确定所述至少一个目标路径节点的步骤之后,所述方法还包括:
判断是否遍历所述路径节点集,当未遍历所述路径节点集时,返回所述从预设状态机的初态开始,依次根据所述路径节点进行状态跳转的步骤。
6.根据权利要求1所述的方法,其特征在于,所述将确定得到的最后一个解析值作为所述目标参数的步骤之后,所述方法还包括:
获取替代参数;
使用所述替代参数替换所述目标参数,生成并显示替换参数后的待解析字符串。
7.一种字符串中参数的解析装置,其特征在于,包括:
获取模块,用于获取待解析字符串与参数路径;所述参数路径用于确定目标参数在所述待解析字符串中的位置;
路径确定模块,用于根据所述参数路径确定路径节点集;所述路径节点集中包括按照解析层级排列的至少一个路径节点;
判断模块,用于基于所述路径节点集,确定至少一个目标路径节点,并判断能否根据所述目标路径节点对所述待解析字符串进行解析;
解析模块,用于当能够进行解析时,根据每个所述目标路径节点,基于所述待解析字符串确定解析值,直至遍历所述路径节点集,将确定得到的最后一个解析值作为所述目标参数;所述解析值为所述待解析字符串中的子字符串,以实现在未知所述待解析字符串结构时,对所述待解析字符串中的所述目标参数的解析及提取;
所述根据每个所述目标路径节点,基于所述待解析字符串确定解析值包括:
建立解析值栈,将所述待解析字符串加入所述解析值栈中;
获取所述解析值栈的栈顶元素,根据每个所述目标路径节点和所述栈顶元素确定所述解析值,并将所述解析值加入所述解析值栈的栈顶;所述栈顶元素为所述解析值栈的栈顶的解析值;
返回获取所述解析值栈的栈顶元素的步骤,直至达到预设停止条件。
8.一种计算机可读存储介质,存储有计算机指令,其特征在于,所述指令被处理器执行时可实现权利要求1~6任一项所述的方法的步骤。
9.一种电子设备,其特征在于,该电子设备包括如权利要求8所述的计算机可读存储介质,还包括可执行所述计算机可读存储介质的处理器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911015658.9A CN111061482B (zh) | 2019-10-24 | 2019-10-24 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911015658.9A CN111061482B (zh) | 2019-10-24 | 2019-10-24 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061482A CN111061482A (zh) | 2020-04-24 |
CN111061482B true CN111061482B (zh) | 2023-12-08 |
Family
ID=70298366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911015658.9A Active CN111061482B (zh) | 2019-10-24 | 2019-10-24 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061482B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487147A (en) * | 1991-09-05 | 1996-01-23 | International Business Machines Corporation | Generation of error messages and error recovery for an LL(1) parser |
CN102487353A (zh) * | 2010-12-02 | 2012-06-06 | 卓望数码技术(深圳)有限公司 | 一种数据传输方法 |
CN109144514A (zh) * | 2018-06-11 | 2019-01-04 | 玖富金科控股集团有限责任公司 | Json格式数据解析存储方法及装置 |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN109766100A (zh) * | 2018-12-11 | 2019-05-17 | 新华三技术有限公司合肥分公司 | 数据处理方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7251722B2 (en) * | 2004-05-11 | 2007-07-31 | Mistletoe Technologies, Inc. | Semantic processor storage server architecture |
CN100505752C (zh) * | 2005-01-21 | 2009-06-24 | 华为技术有限公司 | 文本编码类协议通用解析器 |
US8375031B2 (en) * | 2011-02-10 | 2013-02-12 | Tektronix, Inc. | Lossless real-time line-rate filtering using PCAP style filters and hardware assisted patricia trees |
US10817490B2 (en) * | 2017-04-28 | 2020-10-27 | Microsoft Technology Licensing, Llc | Parser for schema-free data exchange format |
-
2019
- 2019-10-24 CN CN201911015658.9A patent/CN111061482B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487147A (en) * | 1991-09-05 | 1996-01-23 | International Business Machines Corporation | Generation of error messages and error recovery for an LL(1) parser |
CN102487353A (zh) * | 2010-12-02 | 2012-06-06 | 卓望数码技术(深圳)有限公司 | 一种数据传输方法 |
CN109144514A (zh) * | 2018-06-11 | 2019-01-04 | 玖富金科控股集团有限责任公司 | Json格式数据解析存储方法及装置 |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN109766100A (zh) * | 2018-12-11 | 2019-05-17 | 新华三技术有限公司合肥分公司 | 数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111061482A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111045645B (zh) | 页面编辑方法、装置、电子设备及存储介质 | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN111124379B (zh) | 页面生成方法、装置、电子设备及存储介质 | |
JP2015043198A (ja) | 解析システム、解析方法および解析プログラム | |
CN113986241A (zh) | 一种基于知识图谱的业务规则的配置方法以及装置 | |
CN103544298A (zh) | 组件的日志分析方法和分析装置 | |
CN111061482B (zh) | 字符串中参数的解析方法、装置、存储介质及电子设备 | |
CN104298657A (zh) | 基于表达式的评价指标解析系统 | |
CN117435230A (zh) | 基于神经网络的代码注释处理方法及装置 | |
CN111045685A (zh) | 代码转换方法、装置、存储介质及电子设备 | |
CN104484156A (zh) | 多语言公式的编辑方法、编辑系统和多语言公式编辑器 | |
CN113779030B (zh) | 枚举值查询方法、可读存储介质及计算机程序产品 | |
JP5041990B2 (ja) | ソフトウェア部品抽出支援装置 | |
CN116383070A (zh) | 一种面向高mc/dc的符号执行方法 | |
CN113778455B (zh) | 一种代码转换方法、装置、电子设备及存储介质 | |
JP2009211599A (ja) | マッピング定義作成システムおよびマッピング定義作成プログラム | |
CN114326642A (zh) | 用于核电dcs系统的接口匹配方法、装置、设备和介质 | |
EP3255558A1 (en) | Syntax analyzing device, learning device, machine translation device and recording medium | |
CN107612919B (zh) | 协议配置方法及装置 | |
CN113001538A (zh) | 一种命令解析方法及系统 | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
CN118170719B (zh) | 一种等保测评的自动化归档方法、装置、设备及存储介质 | |
CN114880242B (zh) | 测试用例的提取方法、装置、设备和介质 | |
CN111026376B (zh) | 函数配置方法、装置、存储介质及电子设备 | |
CN104932710A (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 |