CN117829130B - Json字符串解析方法、装置、设备及存储介质 - Google Patents
Json字符串解析方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117829130B CN117829130B CN202410254009.9A CN202410254009A CN117829130B CN 117829130 B CN117829130 B CN 117829130B CN 202410254009 A CN202410254009 A CN 202410254009A CN 117829130 B CN117829130 B CN 117829130B
- Authority
- CN
- China
- Prior art keywords
- scanning
- character
- json
- scanning direction
- analysis
- 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
- 238000004458 analytical method Methods 0.000 title claims abstract description 326
- 230000002441 reversible effect Effects 0.000 claims description 107
- 238000000034 method Methods 0.000 claims description 46
- 230000014509 gene expression Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 2
- 230000002457 bidirectional effect Effects 0.000 abstract description 7
- 230000001360 synchronised effect Effects 0.000 abstract description 6
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/93—Document management systems
-
- 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)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Character Input (AREA)
Abstract
本申请公开了一种JSON字符串解析方法、装置、设备及存储介质,首先对待解析的JSON字符串进行同步双向的扫描解析操作,从JSON字符串的首端和尾端同时开始扫描解析;而后在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止两个方向的扫描解析操作,得到两个方向的扫描解析结果,其中,所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;最后根据两个方向的扫描解析结果生成最终的解析结果,实现了对JSON字符串的解析任务。上述的JSON字符串解析方案,采用了双向同步扫描解析的方式,相较于单向的扫描解析方案,本方案提高了对JSON字符串的解析效率。
Description
技术领域
本申请涉及计算机技术领域,更具体的说,是涉及一种JSON字符串解析方法、装置、设备及存储介质。
背景技术
当前,HTTP协议的服务接口大多采用符合表象性状态转变(representationalstate transfer,REST)原则的Restful架构方式。在Restful架构方式中,用于交互的数据格式通常为JSON(JavaScript Object Notation)格式,即JS对象简谱,是一种轻量级的数据交换格式。
现有的JSON解析器,例如Jackjson、Fastjson、Gson、Jsonlib等,可以实现JSON字符串的解析任务。但是现有的JSON解析器在解析JSON字符串时,解析效率较差。
发明内容
鉴于上述问题,提出了本申请以便提供一种JSON字符串解析方法、装置、设备及存储介质,以提高对JSON字符串的解析效率。
具体方案如下:
第一方面,提供了一种JSON字符串解析方法,包括:
对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
第二方面,提供了一种JSON字符串解析装置,包括:
扫描解析单元,用于对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
控制单元,用于在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
解析结果确定单元,用于依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
第三方面,提供了一种JSON字符串解析设备,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现上述的JSON字符串解析方法的各个步骤。
第四方面,提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述的JSON字符串解析方法的各个步骤。
借由上述技术方案,本申请对待解析的JSON字符串进行了同步双向的扫描解析操作,从JSON字符串的首端和尾端同时开始扫描解析;而后在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止两个方向的扫描解析操作,得到两个方向的扫描解析结果,其中,所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;最后根据两个方向的扫描解析结果生成最终的解析结果,实现了对JSON字符串的解析任务。上述的JSON字符串解析方案,采用了双向同步扫描解析的方式,相较于单向的扫描解析方案,本方案提高了对JSON字符串的解析效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例提供的一种JSON字符串解析方法的流程示意图;
图2示例了正向和反向中的任一种扫描方向的扫描解析过程示意图;
图3示例了应用本申请实施例解析一JSON字符串的过程示意图;
图4示例了不同解析组件解析相同的JSON字符串时的CPU占用率变化曲线;
图5为本申请实施例提供的一种JSON字符串解析装置的结构示意图;
图6为本申请实施例提供的JSON字符串解析设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提供了一种JSON字符串解析方法、装置、设备及存储介质,可以适用于实现JSON字符串的解析任务,提高解析效率。
图1是根据本申请实施例示出的一种JSON字符串解析方法的流程示意图,结合图1所示,该方法可以包括如下步骤:
步骤S101、对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作。
其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作。
可选的,所述正向的扫描解析操作和所述反向的扫描解析操作可以借由不同的线程实现,例如,利用第一线程对所述JSON字符串进行所述正向的扫描解析操作,并且,利用第二线程对所述JSON字符串进行所述反向的扫描解析操作,两个线程的扫描解析过程相互独立。此外,所述第一线程和所述第二线程可以在第三线程的控制下,开始进行各自的扫描解析操作,或停止各自的扫描解析操作。
步骤S102、在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作。
所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;所述预设的停止条件对应的停止操作用于实现:停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果。
步骤S103、依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
上述的方法,在解析JSON字符串时,采用了同步双向的扫描解析方式,从JSON字符串的首端和尾端同时开始扫描解析,在确定所述JSON字符串的全部字符都扫描完成的情况下,按照预设的停止规则执行停止操作,以停止两个方向的扫描解析操作,得到两个方向的扫描解析结果,最后根据两个方向的扫描解析结果生成最终的解析结果,实现了对JSON字符串的解析任务。上述的JSON字符串解析方案,采用了双向同步扫描解析的方式,相较于单向的扫描解析方案,本方案提高了对JSON字符串的解析效率。
需要说明的是,在解析一个标准的JSON字符串时,构成字符串的字符对应的位置可以包括下述六种类型,具体的:
第一类、起始位置,表征一个标准JSON字符串的首端,可以表示为“[”字符或“{”字符;
第二类、键Key位置,即起始位置之后的位置;
第三类、分割位置,用于分割键key和值value,可以表示为“:”字符;
第四类、值value位置,即分割位置之后的位置;
第五类、继续位置,可以表示为“,”字符;
第六类、结束位置,表征一个标准JSON字符串的尾端,可以表示为“]”字符或“}”字符。
可以将上述的“[”字符、“{”字符、“:”字符、“,”字符、“]”字符和“}”字符称作是特殊字符,但是,由于JSON字符串格式是存在先后关系的,特殊字符的作用需要根据其所处的场景确定。示例性的,如果“{”字符位于标准JSON字符串的首端,则表示的是标准JSON字符串的开始,即对应的是起始位置;如果“{”字符位于其他位置,则可能表示值value的开始,也可能表示“{”显示的字符。也就是说,需要根据字符所处场景确定字符的作用,需要将标准JSON字符串从首端到尾端扫描解析一遍,才能确定各字符,特别是上述的特殊字符的实际作用。
在上述的基础上,图2示例了正向和反向中的任一种扫描方向的扫描解析过程示意图。结合图2所示,在本申请提供的一些实施例中,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作可以包括下述步骤:
步骤S201、按照所述扫描方向,扫描得到所述JSON字符串的初始字符。
需要说明的是,上述的初始字符只表示所述扫描方向的扫描解析操作扫描到的第一个字符,不表示JSON字符串的首端。
步骤S202、创建一个所述扫描方向对应的临时栈,将所述初始字符写入所述扫描方向对应的临时栈。
不同的扫描方向对应不同的临时栈,对于正向和反向中的任一种扫描方向,该种扫描方向的扫描解析操作只会对该种扫描方向的对应的临时栈进行处理,不会对另一种扫描方向对应的临时栈进行处理。可选的,所述临时栈可以是一种临时类对象。
步骤S203、按照所述扫描方向,扫描下一个字符,得到当前字符。
而后,对所述当前字符进行解析,所述解析可以包括下述的步骤S204-S209,具体的:
步骤S204、判断所述当前字符是否满足第一预设条件,若是,执行步骤S205,若否,执行步骤S208。
具体的,所述正向的扫描解析操作中,所述第一预设条件为所述当前字符是键key的第一个字符。示例性的,在所述当前字符的上一个字符对应的是起始位置的情况下,或者,在所述当前字符的上一个字符对应的是继续位置,并且所述上一个字符的上一个字符是一个完整的键值对的最后一个字符的情况下,所述当前字符为键key的第一个字符。
在所述反向的扫描解析操作中,所述第一预设条件为所述当前字符是值value的最后一个字符。示例性的,在所述当前字符的上一个字符对应的是结束位置的情况下,或者,在所述当前字符的上一个字符对应的是继续位置,并且所述上一个字符的上一个字符是一个完整的键值对的第一个字符的情况下,所述当前字符为值value的最后一个字符。
步骤S205、将创建时间最晚的所述扫描方向对应的临时栈中的字符写入所述扫描方向对应的数组栈。
需要说明的是,不同的扫描方向对应不同的数组栈,并且一个扫描方向只对应的一个数组栈,此外,一个扫描方向可以具备多个对应的临时栈。对于正向和反向中的任一种扫描方向,该种扫描方向的扫描解析操作只会对该种扫描方向的对应的数组栈进行处理,不会对另一种扫描方向对应的数组栈进行处理。可选的,所述数组栈可以是一种类对象。
步骤S206、创建一个新的所述扫描方向对应的临时栈。
步骤S207、将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成。
在所述当前字符扫描解析完成之后,返回执行步骤S203、按照所述扫描方向,扫描下一个字符,得到当前字符。
步骤S208、判断是否满足第二预设条件,若是,执行步骤S209,若否,执行步骤S207。
其中,所述第二预设条件为所述当前字符对应的是继续位置,并且创建时间最晚的所述扫描方向对应的临时栈中的字符为完整的键值对。
示例性的,可以在所述扫描方向对应的临时栈中的各个字符满足:包含有至少一个“:”字符,“'”字符和“''”字符的数量均为偶数,每一个“{”字符存在对应的“}”字符,不同的“{”字符分别对应不同的“}”字符,每一个“[”字符存在对应的“]”字符,不同的“[”字符分别对应不同的“]”字符,并且每一个“(”字符存在对应的“)”字符,不同的“(”字符分别对应不同的“)”字符等条件的情况下,将所述扫描方向对应的临时栈中的各字符确定为完整的键值对。
步骤S209、对创建时间最晚的所述扫描方向对应的临时栈中的字符进行处理,得到键值对,将所述键值对写入所述扫描方向对应的数组栈。
可选的,在生成键值对时,可以将创建时间最晚的所述扫描方向对应的临时栈中的用于分割的“:”字符转换为“=”字符。
在将所述键值对写入所述扫描方向对应的数组栈之后,执行步骤S206、创建一个新的所述扫描方向对应的临时栈,步骤S207、将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成,而后返回执行步骤S203、按照所述扫描方向,扫描下一个字符,得到当前字符。
在不满足所述第二预设条件的情况下,执行步骤S207、将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成,而后返回执行步骤S203、按照所述扫描方向,扫描下一个字符,得到当前字符。
在本申请提供的一些实施例中,所述预设的停止条件可以包括:正向的扫描解析操作的停止条件和反向的扫描解析操作的停止条件。需要说明的是,所述满足预设的停止条件为:满足正向的扫描解析操作的停止条件,且满足反向的扫描解析操作的停止条件。
在上述的基础上,上述的步骤S102、在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,可以包括:
对于正向和反向中的每一种扫描方向,在将所述键值对写入所述扫描方向对应的数组栈之后,且,两个扫描方向的扫描解析操作扫描解析完成的字符总数大于所述JSON字符串的字符总数的情况下,确定满足所述扫描方向的扫描解析操作的停止条件;在确定满足所述扫描方向的扫描解析操作的停止条件的情况下,停止执行所述扫描方向的扫描解析操作,将当前时刻的所述扫描方向的数组栈作为所述扫描方向的扫描解析结果。
可选的,对于正向和反向中的任一种扫描方向,可以在将所述键值对写入所述扫描方向对应的数组栈之后,判断两个扫描方向的扫描解析操作,扫描解析完成的字符总数,是否大于所述JSON字符串的字符总数;若是,则确定满足所述扫描方向的扫描解析操作的停止条件;若否,则继续执行将所述键值对写入所述扫描方向对应的数组栈之后的步骤(即步骤S206)。
需要说明的是,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作扫描解析完成的字符,是被写入所述扫描方向对应的临时栈的字符;此外,在停止执行所述扫描方向的扫描解析操作时,所述扫描方向对应的数组栈中的最晚进栈的元素可以是一个完整的键值对;借由上述的停止条件,最终得到的正向的扫描解析结果和反向的扫描解析结果具备至少一个相同的元素,该元素可能是键值对。
在本申请提供的一些实施例中,上述的步骤S103、依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果,可以包括:
基于所述正向的扫描解析结果和所述反向的扫描解析结果中的重复的键值对,拼接所述正向的扫描解析结果和所述反向的扫描解析结果,得到所述JSON字符串的解析结果。
可选的,可以依次提取所述正向的扫描解析结果和所述反向的扫描解析结果中的进栈时间最晚的元素,以确定所述正向的扫描解析结果和所述反向的扫描解析结果中的重复的键值对;依次删除所述正向的扫描解析结果中的进栈晚于所述重复的键值对的各个元素,得到处理后的正向的扫描解析结果;而后,将所述反向的扫描解析结果中的进栈时间晚于所述重复的键值对的各元素,依次写入所述处理后的正向的扫描解析结果,得到所述JSON字符串的解析结果。
在本申请提供的一些实施中,所述预设的停止条件包括:第一位序和第二位序相同或相邻。
其中,所述第一位序为所述正向的扫描解析操作的当前字符在所述JSON字符串中的位序;所述第二位序为所述反向的扫描解析操作的当前字符在所述JSON字符串中的位序。
可选的,所述正向的扫描解析操作还可以包括:
在按照正向扫描得到当前字符之后,确定所述当前字符的位序,得到第一位序。
所述反向的扫描解析操作还可以包括:
在按照反向扫描得到当前字符之后,确定所述当前字符的位序,得到第二位序。
基于此,可以在所述第一位序和所述第二位序中的任一个发生变化之后,判断所述第一位序和所述第二位序是否相同或相邻。即在扫描得到当前字符之后,先确定第一位序和第二位序是否相同或相邻,在确定第一位序和第二位序不相同且不相邻的情况下,再对当前字符进行解析。
可以将第一位序和第二位序相同或相邻,称作是停止条件,在满足不同的停止条件的情况下,需要执行不同的停止操作。在上述的基础上,在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,可以包括步骤A-B:
步骤A、按照所满足的停止条件对应的停止规则,停止所述正向的扫描解析操作和所述反向的扫描解析操作。具体的:
在所述第一位序和所述第二位序相同的情况下,对于正向和反向中的任一个扫描方向,若所述扫描方向不是目标扫描方向,停止所述扫描方向的扫描解析操作,若所述扫描方向是所述目标扫描方向,在所述第一位序对应的当前字符扫描解析完成之后,停止所述目标扫描方向的扫描解析操作。
其中,所述目标扫描方向是根据预设规则确定的正向和反向中的一个扫描方向。可选的,比较第一时刻和第二时刻,其中,第一时刻为扫描得到所述第一位序对应的字符的时刻,第二时刻为扫描得到所述第二位序对应的字符的时刻;判断第一时刻和第二时刻是否相同;若相同,所述目标扫描方向是预先指定的正向和反向中的一个扫描方向;若不同,将第一时刻和第二时刻中的较早的时刻对应的扫描方向确定为目标扫描方向。也就是说,在正向的扫描解析操作和反向的扫描解析操作同时扫描到同一字符时,由预先指定目标扫描方向的扫描解析操作对该字符进行解析,即该字符的解析结果被写入所述目标扫描方向的扫描解析结果;在正向的扫描解析操作和反向的扫描解析操作先后扫描到同一字符时,由先扫描到该字符的扫描解析操作继续对该字符进行解析,另一个不再解析该字符。
在所述第一位序和所述第二位序相邻的情况下,在所述第一位序对应的当前字符扫描解析完成之后,停止所述正向的扫描解析操作,并且,在所述第二位序对应的当前字符扫描解析完成之后,停止所述反向的扫描解析操作。
步骤B、对于正向和反向中的任一个扫描方向,在停止所述扫描方向的扫描解析操作之后,将创建时间最晚的所述扫描方向对应的临时栈中的字符,按照写入该临时栈的先后顺序,依次写入所述扫描方向对应的数组栈,得到所述扫描方向的扫描解析结果。
也就是说,先写入临时栈的字符,也将先写入数组栈,以保留字符在字符串中的位序。此外,所述扫描方向的扫描解析结果可以表示为数组栈charstack。
特殊的,若创建时间最晚的所述扫描方向对应的临时栈中的字符中包含有键值对,则将能够构成键值对的多个字符以键值对的形式写入数组栈。需要说明的是,该键值对可能是以键值对形式表示的值value。
在本申请提供的一些实施例中,步骤S103、依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果,可以包括下述的步骤C-D:
步骤C、依次将所述反向的扫描解析结果中的各个元素写入所述正向的扫描解析结果,得到所述JSON字符串的扫描结果。
上述的步骤C实现了正向的扫描解析结果和反向的扫描解析结果的拼接,相应的,也可以依次将所述正向的扫描解析结果中的各个元素写入所述反向的扫描解析结果,得到所述JSON字符串的扫描结果。需要说明的是,对于数组栈,优先出栈的元素具备最晚的进栈时刻。
步骤D、对所述JSON字符串的扫描结果进行解析,生成所述JSON字符串的解析结果。
需要说明的是,在正向的扫描解析结果和反向的扫描解析结果的拼接处,可能存在未以键值对的形式表示的若干个字符,经由步骤D的解析操作,可以将未以键值对的形式表示的若干个字符转化为键值对。也就是说,所述JSON字符串的解析结果可以包含有:起始位置、结束位置、完整的键值对以及每两个相邻的完整的键值对之间的继续位置。
在一种可能的实现方式中,所述JSON字符串的解析结果可以是:链表和哈希表实现LinkedHashMap对象,或,链表LinkedList对象。
需要说明的是,链表和哈希表实现LinkedHashMap对象是一个Map结构,链表LinkedList对象是一个List结构,这两种类结构能够保留字符在字符串中的顺序,保留对数据使用者有用的元数据位序。
可选的,可以直接对解析得到的链表和哈希表实现LinkedHashMap对象或链表LinkedList对象进行业务逻辑处理,也可以将解析得到的链表和哈希表实现LinkedHashMap对象或链表LinkedList对象转化为Bean对象,再对Bean对象进行业务逻辑处理。
可选的,也可以依据所述JSON字符串的字符总数,预先指定正向的扫描解析操作所要扫描解析的第一字符数和反向的扫描解析操作所要扫描解析的第二字符数,第一字符数和第二字符数的和等于所述JSON字符串的字符总数;再同步开始进行正向的扫描解析操作和反向的扫描解析操作;在正向的扫描解析操作完成所述第一字符数的字符扫描解析任务之后,停止正向的扫描解析操作;在反向的扫描解析操作完成所述第二字符数的字符扫描解析任务之后,停止反向的扫描解析操作;而后执行步骤S103,得到所述JSON字符串的解析结果。
示例性的,图3示出了一个JSON字符串的扫描解析过程示意图,结合图3所示,主线程从字符串首端开始执行正向的扫描解析操作,解析出key:value形式的键值对,生成正向的扫描解析结果,可以表示为数组栈charstack1;辅线程从字符串尾端开始执行反向的扫描解析操作,解析出value:key形式的键值对,生成反向的扫描解析结果,可以表示为数组栈charstack2;而后基于数组栈charstack1和数组栈charstack2,构建结果结构,所述结果结构可以是链表和哈希表实现LinkedHashMap对象或链表LinkedList对象。
相应的,解析得到的所述JSON字符串的解析结果,示例如链表和哈希表实现LinkedHashMap对象或链表LinkedList对象,可以经过相应的反解析操作生成对应的JSON字符串。
本申请实施例提供的JSON字符串解析方案,可以服务于Web应用中间件,本方案能够实现JSON风格的字符串数据和Java内存对象之间的高效转换,基于此,借助本申请方案可以加快数据在程序中的流传速度,保证应用性能。
在本申请提供的一些实施例中,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作还可以包括:
在创建一个新的所述扫描方向对应的临时栈之后,释放除创建时间最晚的所述扫描方向对应的临时栈以外的所述扫描方向对应的各个临时栈。
上述的方法,通过及时主动的销毁临时栈,或者临时类对象,可以减少对内存的占用,减少Java 垃圾回收(Garbage Collection,gc)操作。
在本申请提供的一些实施例中,在生成所述JSON字符串的解析结果之后,本申请实施例提供的JSON字符串解析方法还可以包括:
对于所述JSON字符串的解析结果中的每一个键值对,在所述键值对中的值value与预设的正则表达式匹配的情况下,对所述键值对中的值value进行所述正则表达式对应的运算,得到运算结果,将所述JSON字符串的解析结果中的所述键值对中的值value替换为所述运算结果,得到所述JSON字符串的最终解析结果。
可选的,可以依据预先的正则表达式开头字符和正则表达式结束字符判断值value是否为一个正则表达式,确定值value是否与预设的正则表达式匹配,若是,对值value进行所述正则表达式对应的运算,示例性的,可以基于上下文环境中的变量数据,对值value中的变量进行赋值,即进入正则解析逻辑,所述正则解析逻辑可以参照申请号202210220948.2的表达式处理方案。特殊的,在正则解析失败的情况下,保留原始的值value,不进行替换。
借由上述的方法可以实现,在解析JSON字符串的过程中,对正则表达式进行解析和赋值,基于此,可以避免进行二次解析,从而提升整体的解析性能,此外,通过配置多个正转表达式,还可以提升JSON解析过程的自主可控性。
示例性的,在同一主机上,使用JsonLib(版本:2.2.3)、GSON(版本: 2.8.5)、Jackjson(版本: 1.9.13)、Fastjson(版本: 1.1.36)四款JSON解析组件和应用本申请实施例提供的JSON字符串解析方法的新解析组件,连续解析5个不同的JSON字符串,每个JSON字符串的字符总数均为979,表1示出了各种解析组件的解析耗时(单位:毫秒)。
表1
实验结果表明,本申请实施例提供的JSON字符串解析方案,通过双向扫描解析的方式,实现了高效率的JSON字符串解析任务。
此外,现有的JSON字符串解析方案,在解析字符时,需要扫描多次。而本申请实施例提供的解析方案使用了空间换运算的思想,具体的,在一个扫描方向的扫描解析过程中,对于一个字符,只扫描一次,而后借由临时栈存储该字符,无需对该字符进行二次或多次的扫描识别。也就是说,在应用本申请实施例提供的JSON字符串解析方案解析JSON字符串时,对于一个字符,通常情况下只扫描一次,本方案减少了字符的扫描次数,从而减少了对CPU的占用。示例性的,图4示出了不同的解析组件解析相同的JSON字符串时的CPU占用情况,结合图4所示,相较于现有的解析组件,本方案对CPU资源的占用率较低。并且,本申请实施例提供的JSON字符串解析方案,可以通过自编写的代码实现,不需要依赖任何外部的Java包或组件,也就是说,JSON字符串解析方案的实现代码中不包含与JSON字符串解析功能无关的冗余代码,因此,本方案的代码量较小。
下面对本申请实施例提供的JSON字符串解析装置进行描述,下文描述的JSON字符串解析装置与上文描述的JSON字符串解析方法可相互对应参照。
参见图5,图5为本申请实施例公开的一种JSON字符串解析装置结构示意图。
如图5所示,该装置可以包括:
扫描解析单元51,用于对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
控制单元52,用于在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
解析结果确定单元53,用于依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
在本申请提供的一些实施例中,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作,可以包括:
按照所述扫描方向,扫描得到所述JSON字符串的初始字符;
创建一个所述扫描方向对应的临时栈,将所述初始字符写入所述扫描方向对应的临时栈;
按照所述扫描方向,扫描下一个字符,得到当前字符;
对所述当前字符进行解析,所述解析包括:判断所述当前字符是否满足第一预设条件,在所述正向的扫描解析操作中,所述第一预设条件为所述当前字符是键key的第一个字符,在所述反向的扫描解析操作中,所述第一预设条件为所述当前字符是值value的最后一个字符;若所述当前字符满足所述第一预设条件,将创建时间最晚的所述扫描方向对应的临时栈中的字符写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若所述当前字符不满足所述第一预设条件,则判断是否满足第二预设条件,所述第二预设条件为所述当前字符对应的是继续位置,并且创建时间最晚的所述扫描方向对应的临时栈中的字符为完整的键值对;若满足所述第二预设条件,则对创建时间最晚的所述扫描方向对应的临时栈中的字符进行处理,得到键值对,将所述键值对写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若不满足所述第二预设条件,则将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;
在所述当前字符扫描解析完成之后,返回执行按照所述扫描方向,扫描下一个字符,得到当前字符的步骤。
在本申请提供的一些实施例中,所述预设的停止条件可以包括:正向的扫描解析操作的停止条件和反向的扫描解析操作的停止条件。
在上述的基础上,所述控制单元52在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作的过程,可以包括:
对于正向和反向中的每一种扫描方向,在将所述键值对写入所述扫描方向对应的数组栈之后,且,两个扫描方向的扫描解析操作扫描解析完成的字符总数大于所述JSON字符串的字符总数的情况下,确定满足所述扫描方向的扫描解析操作的停止条件;在确定满足所述扫描方向的扫描解析操作的停止条件的情况下,停止执行所述扫描方向的扫描解析操作,将当前时刻的所述扫描方向的数组栈作为所述扫描方向的扫描解析结果。
在本申请提供的一些实施例中,所述解析结果确定单元53依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果的过程,可以包括:
基于所述正向的扫描解析结果和所述反向的扫描解析结果中的重复的键值对,拼接所述正向的扫描解析结果和所述反向的扫描解析结果,得到所述JSON字符串的解析结果。
在本申请提供的一些实施例中,所述预设的停止条件可以包括:第一位序和第二位序相同或相邻;其中,所述第一位序为所述正向的扫描解析操作的当前字符在所述JSON字符串中的位序;所述第二位序为所述反向的扫描解析操作的当前字符在所述JSON字符串中的位序。
在上述的基础上,所述控制单元52在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作的过程,可以包括:
在所述第一位序和所述第二位序相同的情况下,对于正向和反向中的任一个扫描方向,若所述扫描方向不是目标扫描方向,停止所述扫描方向的扫描解析操作,若所述扫描方向是所述目标扫描方向,在所述第一位序对应的当前字符扫描解析完成之后,停止所述目标扫描方向的扫描解析操作;其中,所述目标扫描方向是根据预设规则确定的正向和反向中的一个扫描方向;
在所述第一位序和所述第二位序相邻的情况下,在所述第一位序对应的当前字符扫描解析完成之后,停止所述正向的扫描解析操作,并且,在所述第二位序对应的当前字符扫描解析完成之后,停止所述反向的扫描解析操作;
对于正向和反向中的任一个扫描方向,在停止所述扫描方向的扫描解析操作之后,将创建时间最晚的所述扫描方向对应的临时栈中的字符,按照写入该临时栈的先后顺序,依次写入所述扫描方向对应的数组栈,得到所述扫描方向的扫描解析结果。
在本申请提供的一些实施例中,所述解析结果确定单元53依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果的过程,可以包括:
依次将所述反向的扫描解析结果中的各个元素写入所述正向的扫描解析结果,得到所述JSON字符串的扫描结果;
对所述JSON字符串的扫描结果进行解析,生成所述JSON字符串的解析结果。
在本申请提供的一些实施例中,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作还包括:
在创建一个新的所述扫描方向对应的临时栈之后,释放除创建时间最晚的所述扫描方向对应的临时栈以外的所述扫描方向对应的各个临时栈。
在本申请提供的一些实施例中,所述JSON字符串解析装置还可以包括正则运算单元,用于在生成所述JSON字符串的解析结果之后,对于所述JSON字符串的解析结果中的每一个键值对,在所述键值对中的值value与预设的正则表达式匹配的情况下,对所述键值对中的值value进行所述正则表达式对应的运算,得到运算结果,将所述JSON字符串的解析结果中的所述键值对中的值value替换为所述运算结果,得到所述JSON字符串的最终解析结果。
在本申请提供的一些实施例中,所述JSON字符串的解析结果为:链表和哈希表实现LinkedHashMap对象,或,链表LinkedList对象。
本申请实施例提供的JSON字符串解析装置可应用于JSON字符串解析设备,如具备数据处理能力的终端:手机、电脑、服务器、云端等。可选的,图6示出了JSON字符串解析设备的硬件结构框图,参照图6,JSON字符串解析设备的硬件结构可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:
对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:
对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (11)
1.一种JSON字符串解析方法,其特征在于,包括:
对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果;
其中,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作包括:
按照所述扫描方向,扫描得到所述JSON字符串的初始字符;
创建一个所述扫描方向对应的临时栈,将所述初始字符写入所述扫描方向对应的临时栈;
按照所述扫描方向,扫描下一个字符,得到当前字符;
对所述当前字符进行解析,所述解析包括:判断所述当前字符是否满足第一预设条件,在所述正向的扫描解析操作中,所述第一预设条件为所述当前字符是键key的第一个字符,在所述反向的扫描解析操作中,所述第一预设条件为所述当前字符是值value的最后一个字符;若所述当前字符满足所述第一预设条件,将创建时间最晚的所述扫描方向对应的临时栈中的字符写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若所述当前字符不满足所述第一预设条件,则判断是否满足第二预设条件,所述第二预设条件为所述当前字符对应的是继续位置,并且创建时间最晚的所述扫描方向对应的临时栈中的字符为完整的键值对;若满足所述第二预设条件,则对创建时间最晚的所述扫描方向对应的临时栈中的字符进行处理,得到键值对,将所述键值对写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若不满足所述第二预设条件,则将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;
在所述当前字符扫描解析完成之后,返回执行按照所述扫描方向,扫描下一个字符,得到当前字符的步骤。
2.根据权利要求1所述的JSON字符串解析方法,其特征在于,所述预设的停止条件包括:正向的扫描解析操作的停止条件和反向的扫描解析操作的停止条件;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,包括:
对于正向和反向中的每一种扫描方向,在将所述键值对写入所述扫描方向对应的数组栈之后,且,两个扫描方向的扫描解析操作扫描解析完成的字符总数大于所述JSON字符串的字符总数的情况下,确定满足所述扫描方向的扫描解析操作的停止条件;在确定满足所述扫描方向的扫描解析操作的停止条件的情况下,停止执行所述扫描方向的扫描解析操作,将当前时刻的所述扫描方向的数组栈作为所述扫描方向的扫描解析结果。
3.根据权利要求2所述的JSON字符串解析方法,其特征在于,依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果,包括:
基于所述正向的扫描解析结果和所述反向的扫描解析结果中的重复的键值对,拼接所述正向的扫描解析结果和所述反向的扫描解析结果,得到所述JSON字符串的解析结果。
4.根据权利要求1所述的JSON字符串解析方法,其特征在于,所述预设的停止条件包括:第一位序和第二位序相同或相邻;
其中,所述第一位序为所述正向的扫描解析操作的当前字符在所述JSON字符串中的位序;所述第二位序为所述反向的扫描解析操作的当前字符在所述JSON字符串中的位序;
在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,包括:
在所述第一位序和所述第二位序相同的情况下,对于正向和反向中的任一个扫描方向,若所述扫描方向不是目标扫描方向,停止所述扫描方向的扫描解析操作,若所述扫描方向是所述目标扫描方向,在所述第一位序对应的当前字符扫描解析完成之后,停止所述目标扫描方向的扫描解析操作;其中,所述目标扫描方向是根据预设规则确定的正向和反向中的一个扫描方向;
在所述第一位序和所述第二位序相邻的情况下,在所述第一位序对应的当前字符扫描解析完成之后,停止所述正向的扫描解析操作,并且,在所述第二位序对应的当前字符扫描解析完成之后,停止所述反向的扫描解析操作;
对于正向和反向中的任一个扫描方向,在停止所述扫描方向的扫描解析操作之后,将创建时间最晚的所述扫描方向对应的临时栈中的字符,按照写入该临时栈的先后顺序,依次写入所述扫描方向对应的数组栈,得到所述扫描方向的扫描解析结果。
5.根据权利要求4所述的JSON字符串解析方法,其特征在于,依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果,包括:
依次将所述反向的扫描解析结果中的各个元素写入所述正向的扫描解析结果,得到所述JSON字符串的扫描结果;
对所述JSON字符串的扫描结果进行解析,生成所述JSON字符串的解析结果。
6.根据权利要求1-5中任一项所述的JSON字符串解析方法,其特征在于,对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作还包括:
在创建一个新的所述扫描方向对应的临时栈之后,释放除创建时间最晚的所述扫描方向对应的临时栈以外的所述扫描方向对应的各个临时栈。
7.根据权利要求1-5中任一项所述的JSON字符串解析方法,其特征在于,在生成所述JSON字符串的解析结果之后,还包括:
对于所述JSON字符串的解析结果中的每一个键值对,在所述键值对中的值value与预设的正则表达式匹配的情况下,对所述键值对中的值value进行所述正则表达式对应的运算,得到运算结果,将所述JSON字符串的解析结果中的所述键值对中的值value替换为所述运算结果,得到所述JSON字符串的最终解析结果。
8.根据权利要求1-5中任一项所述的JSON字符串解析方法,其特征在于,所述JSON字符串的解析结果为:链表和哈希表实现LinkedHashMap对象,或,链表LinkedList对象。
9.一种JSON字符串解析装置,其特征在于,包括:
扫描解析单元,用于对待解析的JSON字符串进行同步开始的正向的扫描解析操作和反向的扫描解析操作,其中,所述正向的扫描解析操作是从字符串首端到字符串尾端的扫描解析操作,所述反向的扫描解析操作是从字符串尾端到字符串首端的扫描解析操作;对于正向和反向中的任一种扫描方向,所述扫描方向的扫描解析操作包括:按照所述扫描方向,扫描得到所述JSON字符串的初始字符;创建一个所述扫描方向对应的临时栈,将所述初始字符写入所述扫描方向对应的临时栈;按照所述扫描方向,扫描下一个字符,得到当前字符;对所述当前字符进行解析,所述解析包括:判断所述当前字符是否满足第一预设条件,在所述正向的扫描解析操作中,所述第一预设条件为所述当前字符是键key的第一个字符,在所述反向的扫描解析操作中,所述第一预设条件为所述当前字符是值value的最后一个字符;若所述当前字符满足所述第一预设条件,将创建时间最晚的所述扫描方向对应的临时栈中的字符写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若所述当前字符不满足所述第一预设条件,则判断是否满足第二预设条件,所述第二预设条件为所述当前字符对应的是继续位置,并且创建时间最晚的所述扫描方向对应的临时栈中的字符为完整的键值对;若满足所述第二预设条件,则对创建时间最晚的所述扫描方向对应的临时栈中的字符进行处理,得到键值对,将所述键值对写入所述扫描方向对应的数组栈,并创建一个新的所述扫描方向对应的临时栈,将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;若不满足所述第二预设条件,则将所述当前字符写入创建时间最晚的所述扫描方向对应的临时栈,以表征所述当前字符扫描解析完成;在所述当前字符扫描解析完成之后,返回执行按照所述扫描方向,扫描下一个字符,得到当前字符;
控制单元,用于在确定满足预设的停止条件的情况下,执行所述预设的停止条件对应的停止操作,以停止所述正向的扫描解析操作和所述反向的扫描解析操作,分别得到正向的扫描解析结果和反向的扫描解析结果;所述预设的停止条件用于表征所述JSON字符串的全部字符都扫描完成;
解析结果确定单元,用于依据所述正向的扫描解析结果和所述反向的扫描解析结果,生成所述JSON字符串的解析结果。
10.一种JSON字符串解析设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如权利要求1-8中任一项所述的JSON字符串解析方法的各个步骤。
11.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-8中任一项所述的JSON字符串解析方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410254009.9A CN117829130B (zh) | 2024-03-06 | 2024-03-06 | Json字符串解析方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410254009.9A CN117829130B (zh) | 2024-03-06 | 2024-03-06 | Json字符串解析方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117829130A CN117829130A (zh) | 2024-04-05 |
CN117829130B true CN117829130B (zh) | 2024-05-17 |
Family
ID=90517662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410254009.9A Active CN117829130B (zh) | 2024-03-06 | 2024-03-06 | Json字符串解析方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117829130B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4086253B1 (ja) * | 2006-12-27 | 2008-05-14 | 清 高木 | Xml文書の処理方法および処理プログラム |
US9170848B1 (en) * | 2010-07-27 | 2015-10-27 | Google Inc. | Parallel processing of data |
CN112417844A (zh) * | 2020-11-23 | 2021-02-26 | 西安热工研究院有限公司 | 一种并行的cim/e文件结构化解析方法 |
CN114463033A (zh) * | 2021-12-22 | 2022-05-10 | 上海欣兆阳信息科技有限公司 | 一种数据筛查方法、装置、电子设备、存储介质 |
CN114611500A (zh) * | 2022-03-08 | 2022-06-10 | 湖南亚信安慧科技有限公司 | 表达式处理方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11157478B2 (en) * | 2018-12-28 | 2021-10-26 | Oracle International Corporation | Technique of comprehensively support autonomous JSON document object (AJD) cloud service |
US11556840B2 (en) * | 2019-05-10 | 2023-01-17 | Iqvia Inc. | High-speed scanning parser for scalable collection of statistics and use in preparing data for machine learning |
US20210182480A1 (en) * | 2019-12-13 | 2021-06-17 | Sap Se | Parser for arbitrary text based logs |
US20230401194A1 (en) * | 2022-06-08 | 2023-12-14 | Sap Se | Parsing json on field programmable gate arrays |
-
2024
- 2024-03-06 CN CN202410254009.9A patent/CN117829130B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4086253B1 (ja) * | 2006-12-27 | 2008-05-14 | 清 高木 | Xml文書の処理方法および処理プログラム |
US9170848B1 (en) * | 2010-07-27 | 2015-10-27 | Google Inc. | Parallel processing of data |
CN112417844A (zh) * | 2020-11-23 | 2021-02-26 | 西安热工研究院有限公司 | 一种并行的cim/e文件结构化解析方法 |
CN114463033A (zh) * | 2021-12-22 | 2022-05-10 | 上海欣兆阳信息科技有限公司 | 一种数据筛查方法、装置、电子设备、存储介质 |
CN114611500A (zh) * | 2022-03-08 | 2022-06-10 | 湖南亚信安慧科技有限公司 | 表达式处理方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
面向Redis的数据序列化算法研究;孙杜靖;李玲娟;;计算机技术与发展;20170531(第05期);77-81 * |
Also Published As
Publication number | Publication date |
---|---|
CN117829130A (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8650144B2 (en) | Apparatus and methods for lossless compression of numerical attributes in rule based systems | |
CA2430802C (en) | Method and system for displaying and linking ink objects with recognized text and objects | |
US8838657B1 (en) | Document fingerprints using block encoding of text | |
JP6373489B2 (ja) | カスケーディングスタイルシートファイルの圧縮 | |
JP5291523B2 (ja) | 類似データ検索装置及びそのプログラム | |
JP2005025763A (ja) | 構造化文書の分割プログラム、分割装置、及び分割方法 | |
US8849726B2 (en) | Information processing apparatus and control method for the same | |
WO2009097762A1 (zh) | 基于fa的表项压缩方法及装置、表项匹配方法及装置 | |
JPWO2015151162A1 (ja) | 類似度算出システム、類似度算出方法およびプログラム | |
WO2023061177A1 (zh) | 基于列式数据扫描的多数据发送和接收方法、装置和设备 | |
CN117829130B (zh) | Json字符串解析方法、装置、设备及存储介质 | |
CN111273903B (zh) | 网页制作方法、装置、计算机设备及计算机存储介质 | |
JP2006216024A (ja) | 交換フォーマットメッセージの効率的な変換 | |
CN109977295A (zh) | 一种黑白名单匹配方法及装置 | |
CN108241640B (zh) | 一种分布式的文件存储方法 | |
JP2022151226A (ja) | 情報処理装置及びプログラム | |
CN108804131B (zh) | 一种两配置文件的对比算法 | |
JP4510041B2 (ja) | 文書検索システム及びプログラム | |
JPWO2005101210A1 (ja) | データ解析装置およびデータ解析プログラム | |
CN113127861A (zh) | 一种规则命中检测方法、装置、电子设备及可读存储介质 | |
US20240281645A1 (en) | Method and apparatus for accelerating gnn pre-processing | |
JP6412849B2 (ja) | 通信特徴抽出装置、パケット分類装置、通信特徴抽出方法、パケット分類方法、及びプログラム | |
CN113010184B (zh) | 一种实现Axure工程转换至Qt工程方法 | |
KR100729505B1 (ko) | 망가입자 정보의 페이지단위 출력을 위한 인덱싱방법 | |
JP4775484B2 (ja) | Pdlデータ処理装置とpdlデータ処理プログラム |
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 |