CN113296782A - 解析json数据的方法以及装置 - Google Patents
解析json数据的方法以及装置 Download PDFInfo
- Publication number
- CN113296782A CN113296782A CN202110189624.2A CN202110189624A CN113296782A CN 113296782 A CN113296782 A CN 113296782A CN 202110189624 A CN202110189624 A CN 202110189624A CN 113296782 A CN113296782 A CN 113296782A
- Authority
- CN
- China
- Prior art keywords
- token
- query request
- json data
- currently
- analyzed
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000004458 analytical method Methods 0.000 claims abstract description 45
- 238000010586 diagram Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 230000004044 response Effects 0.000 description 7
- 101100328886 Caenorhabditis elegans col-2 gene Proteins 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 101100328884 Caenorhabditis elegans sqt-3 gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供解析JSON数据的方法以及装置,其中所述方法包括:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
Description
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种解析JSON数据的方法。本说明书一个或者多个实施例同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质。
背景技术
为适应越来越多的联邦分析需求,一些数据库引入了对外部数据源的支持。在外部数据源中,主要是以jsonline形式存在的JSON数据。Jsonline,是一种以token(标记)为基本成分的数据格式。
在查询JSON数据时,需要使用JSON数据解析器对JSON数据进行解析。目前,一般采取DOM式解析风格,即首先完整的解析json数据,包括所有token及对应的值,之后在内存中构造一种Document Object Tree。但是,DOM式解析会浪费大量的内存,比较低效。因此,如何高效地解析JSON数据成为了提升数据库性能的关键。
发明内容
有鉴于此,本说明书施例提供了一种解析JSON数据的方法。本说明书一个或者多个实施例同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种解析JSON数据的方法,包括:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
可选地,所述JSON数据对应数据库中表的数据;所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列;如果不对应,则确定当前解析到的token不存在所述查询请求需要的数据;如果对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取;如果不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值;判断是否已经取得所述查询请求需要的所有取值;如果是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型;如果不是,确定当前解析到的token不存在所述查询请求需要的数据。
可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型包括:在逐token地解析JSON数据时,根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token。
可选地,所述判断当前解析到的token是否对应查询请求指定的列包括:如果当前解析到的token是数组类型的token,获取所述token对应的数组的下标作为列的编号;判断所述列的编号是否为查询请求指定的列的编号。
可选地,所述判断当前解析到的token是否对应查询请求指定的列包括:如果当前解析到的token是对象类型token,获取所述token的对象名称;将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列;如果有,获取对应的列的编号;判断所述列的编号是否为查询请求指定的列的编号。
可选地,所述判断当前解析到的token是否对应查询请求指定的列的步骤,以及,所述根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取的步骤,通过预定义接口请求外界模块来执行。
根据本说明书实施例的第二方面,提供了一种解析JSON数据的装置,包括:解析判断模块,被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。值解析跳过模块,被配置为如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。解析结束模块,被配置为如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该计算机指令被处理器执行时实现本说明书任意实施例所述解析JSON数据的方法的步骤。
本说明书一个实施例提供了解析JSON数据的方法,由于该方法在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据,如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析,如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析,从而本说明书实施例提供的方法通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。
附图说明
图1是本说明书一个实施例提供的一种解析JSON数据的方法的流程图;
图2是本说明书一个实施例提供的JSON数据解析器状态流转示意图;
图3是本说明书一个实施例提供的一种解析JSON数据的装置的结构示意图;
图4是本说明书另一个实施例提供的一种解析JSON数据的装置的结构示意图;
图5是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
token(标记),词法分析常用的一种概念,是组成JSON数据最基本的成分。
在本说明书中,提供了一种解析JSON数据的方法,本说明书同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本说明书一个实施例提供的一种解析JSON数据的方法的流程图,包括步骤102至步骤106。
步骤102:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。
步骤104:如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。
步骤106:如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
可见,本说明书实施例提供的方法通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。例如,根据本说明书实施例提供的方法实现的JSON数据解析器可以应用于OLAP(联机分析处理)场景下,加速解析JSON数据,进而提升OLAP的性能。
本说明书实施例中,结束对JSON数据的解析,是对输入的一串JSON数据的提前终止解析,即不再解析这串JSON数据的剩余内容,如果还有下一串JSON数据,则可以开始解析下一串JSON数据。跳过对当前解析到的token的值的解析,意味着可以跳过当前解析到的token的值的解析,如果这串JSON数据还有下一token,可以进入下一token的解析。
需要说明的是,本说明书实施例提供的方法中,根据查询请求指定的信息来判断是否跳过token的值的解析和/或提前结束解析,其具体实施方式可以结合JSON数据在实际应用场景中的使用方式来决定,本说明书实施例对此并不进行限制。
例如,由于在查询请求需要的所有取值已经取得时,无需继续解析JSON数据,因此,本说明书一个或多个实施例中,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据可以包括:如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值;判断是否已经取得所述查询请求需要的所有取值;如果是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
又例如,在数据库引入JSON数据的应用场景下,所述JSON数据对应数据库中表的数据。例如,若干串JSON数据与数据库某个表关联,该表的数据同时就是这些JSON数据串。JSON数据中的数组类型、对象类型的token通常用来与列对应。由于列是查询请求中的关键信息,例如,查询请求中通常会指定列,以及针对列的值的查询条件。因此,在该应用场景下,如果发现当前解析到的token对应的列在本次查询中并不被需要,那么便可以跳过对token对应的值的解析,如果对应的列在本次查询中需要,再判断当前解析到的列值是否在查询条件需要的范围内,若列值不在范围内,则意味着当前JSON串不符合要求,此时可以提早终止对当前JSON串的解析,从而可大幅降低对JSON数据的解析耗时,达到性能提升的目的。
具体地,例如,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据可以包括:在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列;如果不对应,则确定当前解析到的token不存在所述查询请求需要的数据;如果对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取;如果不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
以当前解析到的token是数组类型的token为例,可以获取所述token对应的数组的下标作为列的编号;判断所述列的编号是否为查询请求指定的列的编号。例如,在JSON数据包含例如“[1,2,3,4]”这样的数组类型的token时,解析到“[”时,可以获取对应的数组的下标作为列的编号。由于JSON数据中数组类型的token对应的下标是其在表中对应列的编号,从而可以利用该列的编号判断这一列是否被查询指定,若这一列并没有被查询指定,则可以跳过对值的解析,如果被查询指定,则可以继续判断该token的值是否在查询请求指定的查询条件的范围内,如果不在,则可以结束对该串JSON数据的解析。
以当前解析到的token是对象类型的token为例,可以获取所述token的对象名称;将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列;如果有,获取对应的列的编号;判断所述列的编号是否为查询请求指定的列的编号。例如,在JSON数据包含例如“{"column1":1,"column2":2,"column3":3,"column4":4}”这样的对象类型的token时,解析到“{”时,可以获取"column1"作为列名。由于JSON数据中对象类型的token的对象名称是其在表中对应列的名称,从而可以利用该对象名称查询出列的编号,进而利用该列的编号判断这一列是否被查询指定,若这一列并没有被查询指定,则可以跳过对值的解析,如果被查询指定,则可以继续判断该token的值是否在查询请求指定的查询条件的范围内,如果不在,则可以结束对该串JSON数据的解析。
需要说明的是,JSON数据中包含的token类型是多种多样的,一般包括:数组、对象、字符串、数值、布尔、空值等类型。而查询请求所需要的数据通常是指定的信息对应的token类型,其他类型的token则不属于查询请求指定的信息对应的token类型,在解析时,可直接跳过对其值的解析,进而提高解析性能。因此,本说明书一个或多个实施例中,在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型;如果不是,确定当前解析到的token不存在所述查询请求需要的数据。
JSON数据也可以支持嵌套,如对象值中可能嵌套数组,数组值中又可能嵌套对象。在数据库引入JSON数据的应用场景中,对应列的token最底层要么是数组,要么是对象,否则一定是查询请求不需要的数据。因此,本说明书一个或多个实施例中,在逐token地解析JSON数据时,可以根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token,如果不是,跳过对当前解析到的token的值的解析。
例如,在输入的JSON数据的内容为:'{"col1":[1,2,{"key":"value"}],"col2":{"key":"value"}}'。如果查询请求指定的列是“col2”,那么在解析过程中,会跳过对`[`,`1`,`2`,`{`,`"key"`,`"value"`,`}`,`]`这些token流的值的解析,解析“col2”及其对应的值。可见,根据本说明书实施例提供的方法实现的JSON数据解析器可大幅降低对json数据的分析耗时,提高解析性能。
本说明书一个或多个实施例中,为了提高JSON数据解析器的可扩展性,根据本说明书实施例提供的方法实现的JSON数据解析器可以通过一组预先定义接口来与外界模块通信。所述判断当前解析到的token是否对应查询请求指定的列的步骤,以及,所述根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取的步骤,通过预定义接口请求外界模块来执行。从而JSON数据解析器可以专注于对token的解析,跳过某些token的解析或提前结束解析的判断,可以由外界模块来执行,进而降低了JSON数据解析器与系统的耦合性,使其适用于任意类型的数据库系统的加速查询,提高JSON数据解析器的可扩展性。
为了使上述实施例更加易于理解,下述结合附图2所示的JSON数据解析器状态流转示意图,对本说明书实施例提供的方法基于状态流转机制以及外界模块进行JSON数据解析的实施例进行详细说明。如图2所示,JSON数据解析器的状态流转机制中,在JSON数据中包括数组类型的token的情况下,状态流转机制至少包括:初始状态、数组开始状态、数组取值状态;在JSON数据中包括对象类型的token的情况下,状态流转机制至少包括:对象开始状态、取对象名状态、跳过取值状态、需要取值状态、对象已取值状态。
InitState(初始状态),JSON数据解析器在IniState状态下,流式逐个token地解析输入的JSON数据。根据本说明书实施例提供的方法,在IniState状态下,如果当前解析到的token不是数组类型或对象类型的token,则跳过对当前解析到的token的值的解析,继续解析下一个token。因此,在遇到数组类型或对象类型的token之前,JSON数据解析器会跳过遇到的token流的值的解析。JSON数据解析器响应于遇到数组类型数据的开始token如“StarArrToken”时,进入ArrStarted状态;在遇到对象类型数据的开始token如“StartObjToken”时,进入ObjStarted状态。
首先,对图2所示的状态流转机制在遇到数组类型数据的开始token情况下的状态流转进行详细说明:
ArrStarted(数组开始状态):
JSON数据解析器响应于在ArrStarted状态下,遇到数组值token“ValueToken”,相应进入ValueGot状态。
JSON数据解析器响应于在ArrStarted状态下,遇到数组类型数据的结束token“EndArrToken”,相应进入InitState状态。
ValueGot(数组取值状态):
JSON数据解析器响应于进入ValueGot状态,获取“ValueToken”中value对应的数组的下标作为列的编号,通过预定义接口请求外界模块来执行所述判断列的编号是否为查询请求指定的列的编号的步骤。
所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第一否定结果,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ArrStarted状态。所述第一否定结果表示列的编号不是查询请求指定的列。
所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第一肯定结果,通过预定义接口请求外界模块来执行判断当前解析到的token的值是否需要被所述查询请求获取的步骤。所述第一肯定结果表示列的编号是查询请求指定的列。
所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第二肯定结果,取得“ValueToken”中保存的值,判断是否已经取得所述查询请求需要的所有取值,如果是,执行“StopParse”即结束对所述JSON数据的解析,且所述JSON数据解析器进入InitState状态。如果否,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ArrStarted状态,所述第二肯定结果表示token的值需要被所述查询请求获取。
所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第二否定结果,执行“StopParse”即结束对所述JSON数据的解析,且所述JSON数据解析器进入InitState状态。所述第二否定结果表示token的值不需要被所述查询请求获取。
下面,在对图2所示的状态流转机制在遇到对象类型数据的开始token情况下的状态流转进行详细说明:
ObjStarted,(对象开始状态):
所述JSON数据解析器响应于在ObjStarted状态下遇到对象类型数据的键token“KeyToken”,进入KeyGot状态。
所述JSON数据解析器响应于在ObjStarted状态下遇到对象类型数据的结束token“EndObjToken”,进入InitState状态。
KeyGot(取对象名状态):
所述JSON数据解析器响应于进入KeyGot状态,获取当前解析到的对象类型数据的键token的键,该键即是对象名称。所述JSON数据解析器通过预定义接口请求外界模块来执行所述将token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列步骤,以及,所述如果有,获取对应的列的编号的步骤,以及,所述判断列的编号是否为查询请求指定的列的编号的步骤。
所述JSON数据解析器响应于在KeyGot状态下接收到所述外界模块返回的第三否定结果,进入IgnoreValue状态。所述第三否定结果表示列名不是在数据表中的列或者列的编号不是查询请求指定的列,即该键是“UnusedKey”。
所述JSON数据解析器响应于在KeyGot状态下接收到所述外界模块返回的第三肯定结果,所述第三肯定结果表示列的编号是查询请求指定的列,即该键是“UsedKey”,进入NeedValue状态。
IgnoreValue(跳过取值状态):
所述JSON数据解析器响应于进入IgnoreValue状态,表明值不被需要,相应的token不需要解析,因此,跳过对象值token“ValueToken”的解析,对下一token进行解析,进入ObjStarted状态。
NeedValue(需要取值状态):
所述JSON数据解析器响应于进入NeedValue状态,对对象值token“ValueToken”进行解析,得到对象值,进入KeyValueGot状态。
KeyValueGot(对象已取值状态):
所述JSON数据解析器响应于进入KeyValueGot状态,通过预定义接口请求外界模块来执行所述判断当前解析到的token的值是否需要被所述查询请求获取的步骤。
所述JSON数据解析器响应于在KeyValueGot状态下接收到所述外界模块返回的第四肯定结果,所述第四肯定结果表示当前解析到的token的值需要被所述查询请求获取,判断是否已经取得所述查询请求需要的所有取值,如果是,执行“StopParse”即结束对所述JSON数据的解析且所述JSON数据解析器,进入InitState状态,如果否,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ObjStarted状态。
需要说明的是,图2中示出的StartArrToken、EndArrToken等token可以是JSON数据中通过json规范指定了语义的token,本说明书实施例提供的方法中提到的token也可以是其他未提到的token,这里不再赘述。
通过上述实施例可见,本说明书实施例提供的方法基于状态流转机制以及外界模块进行JSON数据解析,解析性能高效而且扩展性强,可用于任意数据库系统JSON数据查询的加速。通过token-by-token的方式基于上述状态流转机制流式地解析输入的JSON数据,从列级过滤角度分析性能提升可见,在解析过程中,如果发现当前token对应的列在本次查询中并不被需要,便跳过对token对应的值的解析,如果在解析过程中发现本次查询所需要的列都已经收集完毕了,便提早结束对当前行JSON串的解析,解析性能得到较大提升。从行级过滤角度分析性能提升可见,根据查询请求指定的列的查询条件来判断当前解析到的列值是否在查询条件要求的范围内,若不在范围内,则意味着当前JSON串不符合要求,此时也会提早结束对当前行JSON串的解析,解析性能又得到进一步提升。因此,基于本说明书实施例提供的方法,能够大幅加速JSON数据的解析。
与上述方法实施例相对应,本说明书还提供了解析JSON数据的装置实施例,图3示出了本说明书一个实施例提供的一种解析JSON数据的装置的结构示意图。如图3所示,该装置包括:解析判断模块302、值解析跳过模块304及解析结束模块306。
该解析判断模块302,可以被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。
该值解析跳过模块304,可以被配置为如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。
该解析结束模块306,可以被配置为如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
本说明书实施例提供的装置通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。
图4示出了本说明书另一个实施例提供的一种解析JSON数据的装置的结构示意图。
例如,在数据库引入JSON数据的应用场景下,所述JSON数据对应数据库中表的数据。在该应用场景下,如图4所示,所述解析判断模块302可以包括:列对应判断子模块3022、列否定子模块3024、列肯定子模块3026及条件排除子模块3028。
该列对应判断子模块3022,可以被配置为在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列。
该列否定子模块3024,可以被配置为如果所述列对应判断子模块3022判定不对应,确定当前解析到的token不存在所述查询请求需要的数据。
该列肯定子模块3026,可以被配置为如果所述列对应判断子模块3022判定对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取。
该条件排除子模块3028,可以被配置为如果所述列肯定子模块3026判定不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
在该应用场景下,如果发现当前解析到的token对应的列在本次查询中并不被需要,那么便可以跳过对token对应的值的解析,如果对应的列在本次查询中需要,再判断当前解析到的列值是否在查询条件需要的范围内,若列值不在范围内,则意味着当前JSON串不符合要求,此时可以提早终止对当前JSON串的解析,从而可大幅降低对JSON数据的解析耗时,达到性能提升的目的。
再例如,由于在查询请求需要的所有取值已经取得时,无需继续解析JSON数据,因此,本说明书一个或多个实施例中,如图4所示,所述解析判断模块302可以包括:取值子模块3030、取值判断子模块3032及取值结束子模块3034。
该取值子模块3030,可以被配置为在逐token地解析JSON数据时,如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值。
该取值判断子模块3032,可以被配置为判断是否已经取得所述查询请求需要的所有取值。
该取值结束子模块3034,可以被配置为如果所述取值判断子模块3032判定为是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
需要说明的是,JSON数据中包含的token类型是多种多样的,而查询请求所需要的数据通常是指定的信息对应的token类型,其他类型的token则不属于查询请求指定的信息对应的token类型,在解析时,可直接跳过对其值的解析,进而提高解析性能。因此,本说明书一个或多个实施例中,如图4所示,所述解析判断模块302可以包括:标记类型判断子模块3036及标记类型否定子模块3038。
该标记类型判断子模块3036,可以被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型。
该标记类型否定子模块3038,可以被配置为如果所述标记类型判断子模块3036判定为不是,确定当前解析到的token不存在所述查询请求需要的数据。
例如,所述标记类型判断子模块3036,可以被配置为在逐token地解析JSON数据时,根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token。
以当前解析到的token是数组类型的token为例,如图4所示,所述列对应判断子模块3022可以包括:数组编号获取子模块3022a及列编号判断子模块3022b。
该数组编号获取子模块3022a,可以被配置为如果当前解析到的token是数组类型的token,获取所述token对应的数组的下标作为列的编号。
该列编号判断子模块3022b,可以被配置为判断所述列的编号是否为查询请求指定的列的编号。
以当前解析到的token是对象类型的token为例,如图4所示,所述列对应判断子模块3022可以包括:对象名获取子模块3022c、列名判断子模块3022d、对象编号获取子模块3022e及列编号判断子模块3022b。
该对象名获取子模块3022c,可以被配置为如果当前解析到的token是对象类型token,获取所述token的对象名称。
该列名判断子模块3022d,可以被配置为将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列。
该对象编号获取子模块3022e,可以被配置为如果所述列名判断子模块3022d判定为有,获取对应的列的编号。
该列编号判断子模块3022b,可以被配置为判断所述对象编号获取子模块3022e获取的列的编号是否为查询请求指定的列的编号。
上述为本实施例的一种解析JSON数据的装置的示意性方案。需要说明的是,该解析JSON数据的装置的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,解析JSON数据的装置的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。
图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。
计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
其中,处理器520用于执行如下计算机可执行指令:
在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;
如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;
如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;
如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;
如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (11)
1.一种解析JSON数据的方法,包括:
在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;
如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;
如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
2.根据权利要求1所述的方法,所述JSON数据对应数据库中表的数据;
所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:
在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列;
如果不对应,则确定当前解析到的token不存在所述查询请求需要的数据;
如果对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取;
如果不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
3.根据权利要求1所述的方法,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:
在逐token地解析JSON数据时,如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值;
判断是否已经取得所述查询请求需要的所有取值;
如果是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。
4.根据权利要求1或2所述的方法,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否不存在所述查询请求需要的数据包括:
在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型;
如果不是,确定当前解析到的token不存在所述查询请求需要的数据。
5.根据权利要求4所述的方法,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型包括:
在逐token地解析JSON数据时,根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token。
6.根据权利要求2所述的方法,所述判断当前解析到的token是否对应查询请求指定的列包括:
如果当前解析到的token是数组类型的token,获取所述token对应的数组的下标作为列的编号;
判断所述列的编号是否为查询请求指定的列的编号。
7.根据权利要求2所述的方法,所述判断当前解析到的token是否对应查询请求指定的列包括:
如果当前解析到的token是对象类型token,获取所述token的对象名称;
将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列;
如果有,获取对应的列的编号;
判断所述列的编号是否为查询请求指定的列的编号。
8.根据权利要求2所述的方法,所述判断当前解析到的token是否对应查询请求指定的列的步骤,以及,所述根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取的步骤,通过预定义接口请求外界模块来执行。
9.一种解析JSON数据的装置,包括:
解析判断模块,被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;
值解析跳过模块,被配置为如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;
解析结束模块,被配置为如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
10.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;
如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;
如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。
11.一种计算机可读存储介质,其存储有计算机指令,该计算机指令被处理器执行时实现权利要求1至8任意一项所述解析JSON数据的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110189624.2A CN113296782A (zh) | 2021-02-19 | 2021-02-19 | 解析json数据的方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110189624.2A CN113296782A (zh) | 2021-02-19 | 2021-02-19 | 解析json数据的方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113296782A true CN113296782A (zh) | 2021-08-24 |
Family
ID=77318938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110189624.2A Pending CN113296782A (zh) | 2021-02-19 | 2021-02-19 | 解析json数据的方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296782A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100211572A1 (en) * | 2009-02-13 | 2010-08-19 | International Business Machines Corporation | Indexing and searching json objects |
CN105354020A (zh) * | 2015-09-30 | 2016-02-24 | 武汉钢铁(集团)公司 | 一种Json格式数据解析方法及数据接收端 |
CN109144514A (zh) * | 2018-06-11 | 2019-01-04 | 玖富金科控股集团有限责任公司 | Json格式数据解析存储方法及装置 |
US20190080015A1 (en) * | 2017-09-12 | 2019-03-14 | Sap Se | Parsing nested javascript object notation requests |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN110554877A (zh) * | 2019-09-05 | 2019-12-10 | 北京博睿宏远数据科技股份有限公司 | 一种json数据解析方法、装置、设备及储存介质 |
US20200089750A1 (en) * | 2018-09-17 | 2020-03-19 | Servicenow, Inc. | Streaming parser for structured data-interchange files |
CN110968763A (zh) * | 2018-09-30 | 2020-04-07 | 北京国双科技有限公司 | 数据处理的方法及装置 |
CN111241131A (zh) * | 2020-01-08 | 2020-06-05 | 政采云有限公司 | 一种数据查询方法、装置、设备及计算机可读存储介质 |
-
2021
- 2021-02-19 CN CN202110189624.2A patent/CN113296782A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100211572A1 (en) * | 2009-02-13 | 2010-08-19 | International Business Machines Corporation | Indexing and searching json objects |
CN105354020A (zh) * | 2015-09-30 | 2016-02-24 | 武汉钢铁(集团)公司 | 一种Json格式数据解析方法及数据接收端 |
US20190080015A1 (en) * | 2017-09-12 | 2019-03-14 | Sap Se | Parsing nested javascript object notation requests |
CN109144514A (zh) * | 2018-06-11 | 2019-01-04 | 玖富金科控股集团有限责任公司 | Json格式数据解析存储方法及装置 |
US20200089750A1 (en) * | 2018-09-17 | 2020-03-19 | Servicenow, Inc. | Streaming parser for structured data-interchange files |
CN110968763A (zh) * | 2018-09-30 | 2020-04-07 | 北京国双科技有限公司 | 数据处理的方法及装置 |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN110554877A (zh) * | 2019-09-05 | 2019-12-10 | 北京博睿宏远数据科技股份有限公司 | 一种json数据解析方法、装置、设备及储存介质 |
CN111241131A (zh) * | 2020-01-08 | 2020-06-05 | 政采云有限公司 | 一种数据查询方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (5)
Title |
---|
LIN JIANG 等: "Scalable Processing of Contemporary Semi-Structured Data on Commodity Parallel Processors - A Compilation-based Approach", ASPLOS \'19: PROCEEDINGS OF THE TWENTY-FOURTH INTERNATIONAL CONFERENCE ON ARCHITECTURAL SUPPORT FOR PROGRAMMING LANGUAGES AND OPERATING SYSTEMS, 4 April 2019 (2019-04-04), pages 79, XP058433444, DOI: 10.1145/3297858.3304008 * |
刘柯 等: "基于对象访问层优化JDO的持久对象查询", 微计算机应用, no. 03, 31 May 2006 (2006-05-31), pages 368 - 371 * |
孙光明 等: "基于JSON的Ajax数据通信快速算法", 计算机应用与软件, no. 01, 31 January 2015 (2015-01-31), pages 263 - 266 * |
赵明 等: "XCluster:基于聚类支持查询的XML多文档压缩方法", 计算机研究与发展, no. 05, 31 May 2010 (2010-05-31), pages 804 - 814 * |
马欣妍: "在线表格编辑系统View模式的设计与实现", 中国优秀硕士学位论文全文数据库 信息科技辑, vol. 2013, no. 2, 15 December 2013 (2013-12-15), pages 138 - 386 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147437A (zh) | 一种基于知识图谱的搜索方法及装置 | |
MX2007014899A (es) | Mecanismo de concesion para busqueda. | |
EP3217632B1 (en) | Oid configuration, parsing method, client, node, database and storage medium | |
CN107291770B (zh) | 一种分布式系统中海量数据的查询方法及装置 | |
CN111475588B (zh) | 数据处理方法及装置 | |
CN114461603A (zh) | 多源异构数据融合方法及装置 | |
CN114356971A (zh) | 数据处理方法、装置以及系统 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN111259067A (zh) | 一种基于Spring实现DAO接口的方法、装置及设备 | |
US20080147618A1 (en) | Method and Computer Unit for Determining Computer Service Names | |
CN111198898B (zh) | 大数据查询方法及大数据查询装置 | |
CN109241095A (zh) | 一种快速查询方法、终端和可存储介质 | |
CN114139040A (zh) | 一种数据存储及查询方法、装置、设备及可读存储介质 | |
CN113296782A (zh) | 解析json数据的方法以及装置 | |
CN114764406B (zh) | 一种数据库查询方法及相关装置 | |
CN114924966A (zh) | 基于数据库pl语言的测试用例生成方法以及装置 | |
CN114968917A (zh) | 一种文件数据快速导入方法及装置 | |
CN113297306B (zh) | 数据处理方法及装置 | |
CN101576897A (zh) | 文件内容检索系统及方法 | |
CN113297199B (zh) | 时空数据引擎的使用方法、装置及Cassandra数据库系统 | |
CN116975126B (zh) | 数据查询方法、装置、计算设备和计算机可读存储介质 | |
CN117669737B (zh) | 一种端到端地理行业大语言模型构建及使用方法 | |
US20170147707A1 (en) | Apparatus and method for managing graph data | |
CN107679218A (zh) | 基于内存的搜索方法及装置 | |
CN106934002B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40059175 Country of ref document: HK |