CN107220096A - 一种json数据解析方法及装置 - Google Patents
一种json数据解析方法及装置 Download PDFInfo
- Publication number
- CN107220096A CN107220096A CN201710312743.6A CN201710312743A CN107220096A CN 107220096 A CN107220096 A CN 107220096A CN 201710312743 A CN201710312743 A CN 201710312743A CN 107220096 A CN107220096 A CN 107220096A
- Authority
- CN
- China
- Prior art keywords
- java
- json
- nodes
- type
- template
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种json数据解析方法及装置,涉及计算机应用技术领域。其中,该方法包括:从json数据中抽取待查询的json节点;依据所述json节点的信息配置解析模板;依据所述解析模板构建java数据结构;利用所述json数据初始化所述java数据结构,得到java对象。本发明实施例提供的技术方案实现了只需通过配置不同的解析模板即可解析不同格式的json数据,而不必重新开发整个解析工具,从而提高了解析工具的通用性,也减少了大量的开发成本。
Description
本申请要求于2017年4月20日提交中国国家知识产权局、申请号为201720419143.5、发明名称为“一种json数据解析方法及装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明实施例涉及计算机应用技术领域,尤其涉及一种json数据解析方法及一种json数据解析装置。
背景技术
目前开源的Json数据解析工具有FastJson、JackSon、Gson等第三方Java类库。他们都支持Json数据的序列化与反序列化。FastJson是一种java语言实现的json解析工具;JackSon是一种java平台的数据处理框架;Gson是一种用来在Java对象和Json数据之间进行映射的java类库。
现有的json数据解析方法通常是先将json数据映射为java对象,再从java对象中获取我们需要的信息。在将json数据映射为java对象的过程中,首先找到我们关心的json节点,然后将这些json节点通过java类库映射为java对象。在编码的过程中,需要显示定义这些json节点的名字以及属性,所以如果想要解析另外一种格式的json数据,则必须重新改写代码的逻辑。由于json数据格式具有多样性,在现有方法中,对json节点的硬编码解析只能适配某一种json格式的数据,而对于其他格式的json数据,必须重新改写解析程序来进行适配,因此通用性较差。
发明内容
本发明实施例提供一种json数据解析方法及装置,用以解决现有技术中生成的解析工具通用性较差的问题。
第一方面,本发明实施例中提供了一种json数据解析方法,包括:
从json数据中抽取待查询的json节点;
依据所述json节点的信息配置解析模板;
依据所述解析模板构建java数据结构;
利用所述json数据初始化所述java数据结构,得到java对象。
第二方面,本发明实施例中提供了一种json数据解析装置,包括:
抽取模块,用于从json数据中抽取待查询的json节点;
配置模块,用于依据所述json节点的信息配置解析模板;
java数据构建模块,用于依据所述解析模板构建java数据结构;
初始化模块,用于利用所述json数据初始化所述java数据结构,得到java对象。
所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
本发明实施例通过依据json节点的信息配置解析模板,再依据该解析模板构建java类,实现了只需通过配置不同的解析模板即可解析不同格式的json数据,而不必重新开发整个解析工具,从而提高了解析工具的通用性,也减少了大量的开发成本。
本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本发明实施例提供的一种json数据解析方法流程示意图;
图2示出了本发明实施例一种json数据解析方法实施例中多叉树结构的示意图;
图3示出了根据本发明施例的提供的一种json数据解析装置的框图;
图4示出了根据本发明实施例提供的一种服务器的框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在本发明的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例提供的一种json数据解析方法流程示意图,该方法具体可以包括如下步骤。
步骤101,从json数据中抽取待查询的json节点。
抽取出的json节点是源json数据的一个子集,可以表示为一个多叉树结构。为清楚地说明本发明实施例,现举例来说明。例如,待查询的json节点包括:A节点下的B节点和C节点信息;B节点下的D节点信息。这些节点对应的json数据结构如下:
将这些节点抽取出来后,形成如图2所示的多叉树结构。
步骤102,依据所述json节点的信息配置解析模板。
在本发明实施例的一种优选示例中,步骤102具体可以包括如下子步骤:
子步骤11,分析所述json节点之间的从属关系以及所述json节点的结构类型。
分析示例中的json数据得到,B节点和C节点从属于A节点,D节点从属于B节点;A节点的结构类型为jsonObject,B节点的结构类型为jsonArray,C节点和D节点为json结构中的叶子节点,其结构类型为原生数据类型。
子步骤12,映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板。
示例中,根据各个节点的结构类型,A节点和B节点在java类中映射为A类和B类,C节点和D节点在java类中映射为java原始数据。其中A类和B类可以统称为java类。
示例中,根据各节点的从属关系,可知A类的成员变量包括B类类型的List和java原始数据类型的C,B类的成员变量包括java原始数据类型的D。
所述java类节点的属性包括:当前java类的信息输出顺序值、当前java类从属的父类名和当前java类类名。java类节点的属性结构可以表示为{order}_{father_class}_{class},结构中的order表示当前java类的信息输出顺序值,结构中的father_class表示当前java类从属的父类名,结构中的class当前java类类名。
所述java成员变量节点的属性包括:当前java成员变量的信息输出顺序值、当前java成员变量从属的类名和当前java成员变量名。java成员变量节点的属性结构可以表示为{order}_{class}_{prop},结构中的class表示当前java成员变量从属的类名,结构中的prop表示当前java成员变量名。
示例中,A类对应的java类节点的属性可以包括A类的信息输出顺序、A类从属的父类名和A类类名。由于在该示例中A类无从属的父类,所以在这里添加了root节点,root节点为特殊节点,不对json数据中的节点做映射。所以A类对应的java类节点的属性结构可以表示为{o1}_{root}_{A}。
A类的成员变量节点包括B节点和C节点,其中B节点对应的java成员变量节点的属性结构可以表示为{o2}_{A}_{B},C节点对应的java成员变量节点的属性结构可以表示为{o3}_{A}_{C}。
从而表示出A、B和C三个json节点映射成java类型后的对应关系。
java类节点可以利用class节点来表示,java成员变量节点可以利用prop节点来表示,在具体实现中,可以映射于所述json节点之间的从属关系,通过class节点和prop节点配置所述解析模板。
class节点可以包括一个name属性,该name属性的结构可以表示为{order}_{father_class}_{class},结构中的order表示当前java类的信息输出顺序值,结构中的father_class表示当前java类从属的父类名,结构中的class当前java类类名。所以,java类节点的属性结构可以表示为:class name=”{order}_{father_class}_{class}”。
prop节点也可以包括一个name属性。该name属性的结构可以表示为{order}_{class}_{prop},该name属性同样由三部分构成,结构中的order表示当前java成员变量的信息输出顺序值,结构中的class表示当前java成员变量从属的类名,结构中的prop表示当前java成员变量名。所以,java成员变量节点的属性结构可以表示为:prop name=”{order}_{class}_{prop}”。
子步骤13,依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
prop节点还可以包括一个type属性,该type属性表示当前java成员变量所对应的java类型。
在本发明实施例中,子步骤13具体可以包括如下子步骤:
子步骤1301,若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型。例如,可以将A节点对应的java类型配置为java.lang.Object。
子步骤1302,若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型。例如,可以将B节点对应的java类型配置为java.util.List。
子步骤1303,若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。例如,可以将C节点和D节点对应的java类型配置为java.lang.String。
根据步骤102,对应于图2所示的多叉树结构,配置的解析模板为:
<?xml version=”1.0”encoding=”UTF-8”?>
<root>
<class name=”{a}_{root}_{}”>
<prop name=”{01}_{root}_{A}”type=”java.lang.Object”></prop>
</class>
<class name=”{o1}_{root}_{A}”>
<prop name=”{o2}_{A}_{B}”type=”java.util.List”></prop>
<prop name=”{o3}_{A}_{C}”type=”java.lang.String”></prop>
</class>
<class name=”{o2}_{A}_{B}”>
<prop name=”{o1}_{B}_{D}”type=”java.lang.String”></prop>
</class>
</root>
其中root节点为构建java类时,添加的特殊节点,不对json数据中的节点做映射。
该解析模板可以为xml格式。
步骤103,依据所述解析模板构建java数据结构。
将该解析模板导入到程序中,即可自动生成相应的java类。
在本发明实施例的一种优选示例中,步骤103具体可以包括如下子步骤:
子步骤21,构建所述解析模板中java原始数据对应的map数据结构。
map数据结构包括key(键)属性和value(值)属性。对于java原始数据对应的map数据结构,Key属性为当前java原始数据的名称,value属性可以为空。例如C节点对应的java原始数据的map数据结构,可以表示为Key=C,value=string。
子步骤22,构建所述解析模板中的java类对应的map数据结构,所述java类对应的map数据结构包括从属于当前java类的java成员变量对应的map数据结构。
对于java类对应的map数据结构,Key属性可以为当前java类类名,value属性可以为从属于当前java类的java成员变量对应的map数据结构。例如A类对应的map数据结构,可以表示为Key=A,value=map,该value中包含两个元素:(1)Key=B,value=map的元素;(2)Key=C,value=string的元素。
上述map数据结构之间的从属关系映射于java数据结构中java类和java原始数据的从属关系。
步骤104,利用所述json数据初始化所述java数据结构,得到java对象。
在本发明实施例中步骤104具体可以包括:
依据所述map数据结构,搜索所述json数据中的节点,将搜索得到的值赋值到对应的map数据结构中。
现对步骤104举例说明:
层序遍历map结构,搜索json数据中的节点:
(1)先找到位于第一层的A节点,然后再找到A节点下的B节点和C节点,找到C节点的值,例如步骤101下列举的json数据,C节点的值为“c_value”,则将“c_value”赋值给C节点对应的java原始数据的map数据结构中的value。
(2)继续找到B节点下的D节点,找到D节点的值,例如步骤101下列举的json数据,D节点的值“d_value”,将“d_value”赋值给D节点对应的java原始数据的map数据结构中的value。
直到层序遍历到最后一个节点,完成json数据的搜索,java对象的所有元素赋值完毕,完成了java对象的初始化。
针对不同格式的json数据,只需根据上述方法重新配置解析模板即可,其他步骤不变,也就是说其他程序不必重新生成,从而能够根据不同的需求获得不同的解析结果。也可以针对同一格式的json数据,重新配置解析模板中各元素的逻辑关系,得到其他我们所关心的信息。
在实现上述依据解析模板构建java类的过程中,有两种方式可以实现:分别是java动态代理和第三方代码生成库Cglib。由于java动态代理的局限性,因此选用更加适合的Cglib。
本发明实施例通过依据json节点的信息配置解析模板,再依据该解析模板构建java类,实现了只需通过配置不同的解析模板即可解析不同格式的json数据,而不必重新开发整个解析工具,从而提高了解析工具的通用性,也减少了大量的开发成本。
图3为本发明实施例提供的一种json数据解析装置的结构框图。图3为图1对应的装置实施例,图3中与图1相同的内容请参见图1对应的实施例即可。参照图3,该装置具体可以包括以下模块。
抽取模块301,用于从json数据中抽取待查询的json节点。
配置模块302,用于依据所述json节点的信息配置解析模板。
在本发明实施例的一种优选示例中,配置模块302具体可以包括:结构类型分析单元、解析模板配置单元和java类型配置单元。
结构类型分析单元,用于分析所述json节点之间的从属关系以及所述json节点的结构类型。
解析模板配置单元,用于映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板。
进一步地,解析模板配置单元,具体用于映射于所述json节点之间的从属关系,通过class节点和prop节点配置所述解析模板。
所述class节点包括name属性;
所述prop节点包括name属性和type属性。
java类型配置单元,用于依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
进一步地,java类型配置单元具体可以包括:
第一java类型配置子单元,用于若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型;
第二java类型配置子单元,用于若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型;
第三java类型配置子单元,用于若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。
java数据构建模块303,用于依据所述解析模板构建java数据结构。
在本发明实施例的一种优选示例中,java数据构建模块303具体可以包括:
第一构建单元,用于构建所述解析模板中java原始数据对应的map数据结构;
第二构建单元,用于构建所述解析模板中的java类对应的map数据结构,所述java类对应的map数据结构包括从属于当前java类的java成员变量对应的map数据结构。
初始化模块304,用于利用所述json数据初始化所述java数据结构,得到java对象。
具体地,初始化模块304,具体用于依据所述map数据结构,搜索所述json数据中的节点,将搜索得到的值赋值到对应的map数据结构中。
参照图4,示出了本发明实施例提供的一种服务器的框图,该服务器具体可以包括:
处理器401;以及
存储器402,用于存储实现json数据解析方法的程序,该设备通电并通过所述处理器401运行该json数据解析方法的程序后,执行下述步骤:从json数据中抽取待查询的json节点;依据所述json节点的信息配置解析模板;依据所述解析模板构建java数据结构;利用所述json数据初始化所述java数据结构,得到java对象。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
本发明公开A1、一种json数据解析方法,包括:
从json数据中抽取待查询的json节点;
依据所述json节点的信息配置解析模板;
依据所述解析模板构建java数据结构;
利用所述json数据初始化所述java数据结构,得到java对象。
A2、如A1所述的方法中,依据所述json节点的信息配置解析模板的步骤,包括:
分析所述json节点之间的从属关系以及所述json节点的结构类型;
映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板;
依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
A3、如A2所述的方法中,所述java类节点的属性包括:当前java类的信息输出顺序值、当前java类从属的父类名和当前java类类名;
所述java成员变量节点的属性包括:当前java成员变量的信息输出顺序值、当前java成员变量从属的类名和当前java成员变量名。
A4、如求A2所述的方法中,通过java类节点和java成员变量节点映射于所述json节点之间的从属关系,配置所述解析模板的步骤,包括:
映射于所述json节点之间的从属关系,通过class节点和prop节点配置所述解析模板;
所述class节点包括name属性;
所述prop节点包括name属性和type属性。
A5、如A2所述的方法,依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型的步骤,包括:
若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型;
若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型;
若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。
A6、如A1所述的方法中,依据所述解析模板构建java数据结构的步骤,包括:
构建所述解析模板中java原始数据对应的map数据结构;
构建所述解析模板中的java类对应的map数据结构,所述java类对应的map数据结构包括从属于当前java类的java成员变量对应的map数据结构。
A7、如A6所述的方法中,利用所述json数据初始化所述java数据结构,得到java对象的步骤,包括:
依据所述map数据结构,搜索所述json数据中的节点,将搜索得到的值赋值到对应的map数据结构中。
本发明还公开了B8、一种json数据解析装置,包括:
抽取模块,用于从json数据中抽取待查询的json节点;
配置模块,用于依据所述json节点的信息配置解析模板;
java数据构建模块,用于依据所述解析模板构建java数据结构;
初始化模块,用于利用所述json数据初始化所述java数据结构,得到java对象。
B9、如B8所述的装置中,所述配置模块包括:
结构类型分析单元,用于分析所述json节点之间的从属关系以及所述json节点的结构类型;
解析模板配置单元,用于映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板;
java类型配置单元,用于依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
B10、如B9所述的装置中,所述解析模板配置单元,具体用于映射于所述json节点之间的从属关系,通过class节点和prop节点配置所述解析模板;
所述class节点包括name属性;
所述prop节点包括name属性和type属性。
B11、如B9所述的装置中,所述java类型配置单元包括:
第一java类型配置子单元,用于若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型;
第二java类型配置子单元,用于若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型;
第三java类型配置子单元,用于若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。
B12、如B8所述的装置中,所述java数据构建模块包括:
第一构建单元,用于构建所述解析模板中java原始数据对应的map数据结构;
第二构建单元,用于构建所述解析模板中的java类对应的map数据结构,所述java类对应的map数据结构包括从属于当前java类的java成员变量对应的map数据结构。
B13、如B12所述的装置中,所述初始化模块,具体用于依据所述map数据结构,搜索所述json数据中的节点,将搜索得到的值赋值到对应的map数据结构中。
本发明还公开了C14、一种服务器,包括:
处理器;以及
存储器,用于存储实现json数据解析方法的程序,该设备通电并通过所述处理器运行该json数据解析方法的程序后,执行下述步骤:从json数据中抽取待查询的json节点;依据所述json节点的信息配置解析模板;依据所述解析模板构建java数据结构;利用所述json数据初始化所述java数据结构,得到java对象。
Claims (10)
1.一种json数据解析方法,其特征在于,包括:
从json数据中抽取待查询的json节点;
依据所述json节点的信息配置解析模板;
依据所述解析模板构建java数据结构;
利用所述json数据初始化所述java数据结构,得到java对象。
2.根据权利要求1所述的方法,其特征在于,依据所述json节点的信息配置解析模板的步骤,包括:
分析所述json节点之间的从属关系以及所述json节点的结构类型;
映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板;
依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
3.根据权利要求2所述的方法,其特征在于:
所述java类节点的属性包括:当前java类的信息输出顺序值、当前java类从属的父类名和当前java类类名;
所述java成员变量节点的属性包括:当前java成员变量的信息输出顺序值、当前java成员变量从属的类名和当前java成员变量名。
4.根据权利要求2所述的方法,其特征在于,通过java类节点和java成员变量节点映射于所述json节点之间的从属关系,配置所述解析模板的步骤,具体包括:
映射于所述json节点之间的从属关系,通过class节点和prop节点配置所述解析模板;
所述class节点包括name属性;
所述prop节点包括name属性和type属性。
5.根据权利要求2所述的方法,其特征在于,依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型的步骤,包括:
若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型;
若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型;
若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。
6.根据权利要求1所述的方法,其特征在于,依据所述解析模板构建java数据结构的步骤,包括:
构建所述解析模板中java原始数据对应的map数据结构;
构建所述解析模板中的java类对应的map数据结构,所述java类对应的map数据结构包括从属于当前java类的java成员变量对应的map数据结构。
7.根据权利要求6所述的方法,其特征在于,利用所述json数据初始化所述java数据结构,得到java对象的步骤,包括:
依据所述map数据结构,搜索所述json数据中的节点,将搜索得到的值赋值到对应的map数据结构中。
8.一种json数据解析装置,其特征在于,包括:
抽取模块,用于从json数据中抽取待查询的json节点;
配置模块,用于依据所述json节点的信息配置解析模板;
java数据构建模块,用于依据所述解析模板构建java数据结构;
初始化模块,用于利用所述json数据初始化所述java数据结构,得到java对象。
9.根据权利要求8中所述的装置,其特征在于,所述配置模块包括:
结构类型分析单元,用于分析所述json节点之间的从属关系以及所述json节点的结构类型;
解析模板配置单元,用于映射于所述json节点之间的从属关系,通过java类节点和java成员变量节点配置所述解析模板;
java类型配置单元,用于依据所述json节点的结构类型,在所述解析模板的java成员变量节点中配置所述json节点对应的java类型。
10.根据权利要求9所述的装置,其特征在于,所述java类型配置单元包括:
第一java类型配置子单元,用于若所述json节点的结构类型为jsonObject,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java类的类型;
第二java类型配置子单元,用于若所述json节点的结构类型为jsonArray,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java中List的类型;
第三java类型配置子单元,用于若所述json节点的结构类型为原始数据类型,在所述解析模板的java成员变量节点中,将所述json节点对应的java类型配置为表示java原始数据的类型。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201720419143 | 2017-04-20 | ||
CN2017204191435 | 2017-04-20 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107220096A true CN107220096A (zh) | 2017-09-29 |
Family
ID=59944673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710312743.6A Pending CN107220096A (zh) | 2017-04-20 | 2017-05-05 | 一种json数据解析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107220096A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN108037915A (zh) * | 2017-11-07 | 2018-05-15 | 福建天泉教育科技有限公司 | 一种获取json配置文件的方法及终端 |
CN109062560A (zh) * | 2018-07-25 | 2018-12-21 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN109683958A (zh) * | 2018-12-26 | 2019-04-26 | 深圳市越疆科技有限公司 | Json结构函数管理方法 |
CN109684607A (zh) * | 2017-10-19 | 2019-04-26 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
CN110059085A (zh) * | 2019-03-18 | 2019-07-26 | 浙江工业大学 | 一种面向Web 2.0的JSON数据解析与建模方法 |
CN110955429A (zh) * | 2018-09-26 | 2020-04-03 | 北京国双科技有限公司 | 一种数据解析方法及装置 |
CN110968306A (zh) * | 2018-09-28 | 2020-04-07 | 千寻位置网络有限公司 | 数据的代码自动生成方法及装置、控制设备 |
CN111046630A (zh) * | 2019-12-06 | 2020-04-21 | 中国科学院计算技术研究所 | 一种json数据的语法树提取方法 |
CN111400385A (zh) * | 2020-03-11 | 2020-07-10 | 北京明略软件系统有限公司 | 数据导出方法及装置、存储介质、电子装置 |
CN113791768A (zh) * | 2021-09-22 | 2021-12-14 | 海通证券股份有限公司 | 代码生成方法及装置、存储介质、终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103093001A (zh) * | 2013-02-27 | 2013-05-08 | 人民搜索网络股份公司 | 微博数据解析方法及装置 |
US8566807B1 (en) * | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
CN103699386A (zh) * | 2013-12-27 | 2014-04-02 | 云南电网公司玉溪供电局 | 一种基于osgi的通用数据转换引擎系统 |
CN104331315A (zh) * | 2014-10-31 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种任意层次json对象的解析与生成方法及系统 |
CN105117379A (zh) * | 2015-09-11 | 2015-12-02 | 广州华多网络科技有限公司 | 自动转换程序文本的方法及装置 |
-
2017
- 2017-05-05 CN CN201710312743.6A patent/CN107220096A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8566807B1 (en) * | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
CN103093001A (zh) * | 2013-02-27 | 2013-05-08 | 人民搜索网络股份公司 | 微博数据解析方法及装置 |
CN103699386A (zh) * | 2013-12-27 | 2014-04-02 | 云南电网公司玉溪供电局 | 一种基于osgi的通用数据转换引擎系统 |
CN104331315A (zh) * | 2014-10-31 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种任意层次json对象的解析与生成方法及系统 |
CN105117379A (zh) * | 2015-09-11 | 2015-12-02 | 广州华多网络科技有限公司 | 自动转换程序文本的方法及装置 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684607A (zh) * | 2017-10-19 | 2019-04-26 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
CN109684607B (zh) * | 2017-10-19 | 2022-04-08 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
CN108037915A (zh) * | 2017-11-07 | 2018-05-15 | 福建天泉教育科技有限公司 | 一种获取json配置文件的方法及终端 |
CN108008936B (zh) * | 2017-12-04 | 2021-03-19 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN109062560A (zh) * | 2018-07-25 | 2018-12-21 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN109062560B (zh) * | 2018-07-25 | 2022-05-20 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN110955429B (zh) * | 2018-09-26 | 2023-07-14 | 北京国双科技有限公司 | 一种数据解析方法及装置 |
CN110955429A (zh) * | 2018-09-26 | 2020-04-03 | 北京国双科技有限公司 | 一种数据解析方法及装置 |
CN110968306A (zh) * | 2018-09-28 | 2020-04-07 | 千寻位置网络有限公司 | 数据的代码自动生成方法及装置、控制设备 |
CN109683958A (zh) * | 2018-12-26 | 2019-04-26 | 深圳市越疆科技有限公司 | Json结构函数管理方法 |
CN110059085A (zh) * | 2019-03-18 | 2019-07-26 | 浙江工业大学 | 一种面向Web 2.0的JSON数据解析与建模方法 |
CN111046630A (zh) * | 2019-12-06 | 2020-04-21 | 中国科学院计算技术研究所 | 一种json数据的语法树提取方法 |
CN111400385A (zh) * | 2020-03-11 | 2020-07-10 | 北京明略软件系统有限公司 | 数据导出方法及装置、存储介质、电子装置 |
CN113791768A (zh) * | 2021-09-22 | 2021-12-14 | 海通证券股份有限公司 | 代码生成方法及装置、存储介质、终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107220096A (zh) | 一种json数据解析方法及装置 | |
US11146286B2 (en) | Compression of JavaScript object notation data using structure information | |
CN106598574B (zh) | 页面渲染的方法和装置 | |
US10776567B2 (en) | Method for compiling page data, method, device and storage medium for page rendering | |
US10678682B2 (en) | Intelligent batch job testing | |
US8392467B1 (en) | Directing searches on tree data structures | |
CN111190594B (zh) | Vue组件的文档生成方法及装置 | |
CN108170602B (zh) | 一种测试用例生成方法、装置、终端及计算机可读介质 | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
US20180095719A1 (en) | Sorted linked list with a midpoint binary tree | |
Sacramento et al. | Web application model generation through reverse engineering and UI pattern inferring | |
CN111026670B (zh) | 测试用例的生成方法、测试用例的生成装置及存储介质 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN113887173A (zh) | 一种基于xml的协议动态组包和解析方法 | |
CN104866310A (zh) | 知识数据的处理方法和系统 | |
WO2016093839A1 (en) | Structuring of semi-structured log messages | |
CN112015382B (zh) | 一种处理器构架解析方法、装置、设备及储存介质 | |
Klinbua et al. | Translating tosca into docker-compose yaml file using antlr | |
CN114048583A (zh) | 一种基于gim模型扩展实物id的应用方法和系统 | |
CN113821211B (zh) | 命令解析方法、装置、存储介质和计算机设备 | |
CN107506299A (zh) | 一种代码分析方法及终端设备 | |
CN115719055A (zh) | 一种表格构建方法及装置 | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
US20220365762A1 (en) | Neural network model conversion method server, and storage medium | |
JP7508841B2 (ja) | システム検証プログラム生成装置、システム検証プログラム生成方法およびシステム検証プログラム生成プログラム |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170929 |
|
RJ01 | Rejection of invention patent application after publication |