CN109684607B - Json数据解析方法、装置、计算机设备和存储介质 - Google Patents

Json数据解析方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN109684607B
CN109684607B CN201710979911.7A CN201710979911A CN109684607B CN 109684607 B CN109684607 B CN 109684607B CN 201710979911 A CN201710979911 A CN 201710979911A CN 109684607 B CN109684607 B CN 109684607B
Authority
CN
China
Prior art keywords
json
key
array
name
data
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
Application number
CN201710979911.7A
Other languages
English (en)
Other versions
CN109684607A (zh
Inventor
丁骥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201710979911.7A priority Critical patent/CN109684607B/zh
Publication of CN109684607A publication Critical patent/CN109684607A/zh
Application granted granted Critical
Publication of CN109684607B publication Critical patent/CN109684607B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/146Coding or compression of tree-structured data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

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)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及一种JSON数据解析方法、装置、计算机设备和存储介质,方法包括:获取JSON数据;解析JSON数据的数据结构,获取各JSON对象;获取各JSON对象的键名以及与键名对应的键值;根据键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应;根据键名在JSON对象中反射得到Java类的各字段名的字段值。该方法定义了JSON数据转换为JavaBean的规则,该由于该规则基于数据结构出发,不涉及待开发的应用程序相关的内容,即与待开发的应用程序无关。因此,该JSON数据解析方法的应用范围不受限制,能够应用到各种应用软件的开发场景,具有较高的复用性。

Description

JSON数据解析方法、装置、计算机设备和存储介质
技术领域
本申请涉及软件开发技术领域,特别是涉及一种JSON数据解析方法、装置、计算机设备和存储介质。
背景技术
JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。应用程序(APP)在开发过程中,开发人员需要对JSON数据进行解析,将JSON数据转换为Java类(JavaBean)来进一步处理。
传统的解析方案,需要由开发人员提前开发一个Java类(JavaBean),并利用编号好的JavaBean实现JSON数据的解析。而开发的Java类通常针对正在开发的应用程序,涉及了应用程序相关的数据内容。
因此,传统的JSON数据解析方法的复用率低。
发明内容
基于此,有必要针对复用率低的技术问题,提供一种JSON数据解析方法、装置、计算机设备和存储介质。
一种JSON数据解析方法,包括:
获取JSON数据;
解析所述JSON数据的数据结构,获取各JSON对象;
获取各JSON对象的键名以及与所述键名对应的键值;
根据所述键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,所述Java类的字段名与对应JSON对象的所述键名对应;
根据所述键名在所述JSON对象中反射得到所述Java类的各字段名的字段值。
一种JSON数据解析装置,包括获取模块、解析模块、键获取模块、转换模块和反射模块:
所述获取模块,用于获取JSON数据;
所述解析模块,用于解析所述JSON数据的数据结构,获取各JSON对象;
所述键获取模块,用于获取各JSON对象的键名以及与所述键名对应的键值;
所述转换模块,用于根据所述键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,所述Java类的字段名与对应JSON对象的所述键名对应;
所述反射模块,用于根据所述键名在所述JSON对象中反射得到所述Java类的各字段名的字段值。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上所述方法的步骤。
一种可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如上所述方法的步骤。
上述的JSON数据解析方法,定义了JSON数据转换为JavaBean的规则,该规则仅涉及JSON结构,即通过解析JSON数据的数据结构,获取各JSON对象,并对各JSON对象进行转换得到Java类。由于该规则基于数据结构出发,不涉及待开发的应用程序相关的内容,即与待开发的应用程序无关。因此,该JSON数据解析方法的应用范围不受限制,能够应用到各种应用软件的开发场景,具有较高的复用性。
附图说明
图1为一个实施例中JSON数据解析方法的应用环境图;
图2为一个实施例中JSON数据解析方法的流程示意图;
图3为一个实施例中解析JSON数据结构,获取各JSON对象的步骤的流程图;
图4为一个实施例中解析数组结构,获取子元素为对象的JSON对象的步骤的流程图;
图5为另一个实施例中为一个实施例中JSON数据解析方法的流程示意图;
图6为一个实施例中JSON数据解析装置的结构框图;
图7为另一个实施例中JSON数据解析装置的结构框图;
图8为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中JSON数据解析方法的应用环境图。参照图1,该JSON数据解析方法应用于JSON数据解析***。该JSON数据***包括终端110和服务器120。终端110和服务器120通过网络连接,获取通过网络传输的JSON数据。终端110具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
如图2所示,在一个实施例中,提供了一种JSON数据解析方法。本实施例主要以该方法应用于上述图1中的终端110来举例说明。参照图2,该JSON数据解析方法具体包括如下步骤:
S202,获取JSON数据。
其中,JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,JSON数据是指终端接收到的JSON格式的数据,比如,服务器通过网络通信模块发送的JSON数据等。可以理解的是,针对不同的应用场景,JSON数据的内容和来源不限。
S204:解析JSON数据的数据结构,获取各JSON对象。
JSON可以有两种表示结构:对象(JSONObject)和数组(JSONArray)。其中,对象以"{"大括号开始,以"}"大括号结束。中间部分由以","来分割开键值对(key/value)。关键字需要是字符串,而值可以是其他任何数据,比如:字符串,数值,布尔值,对象或者是null。
数组以"["方括号开始,"]"方括号结束,中中间部分由以","来分割对象。数组是子元素的有序集合,子元素的可采用对象和数组结构。每一个子元素一个索引值即子元素的下标。
本实施例中获取JSON对象应当是JSON数据中根结点JSON对象及数组中子元素JSON对象。
S206:获取各JSON对象的键名以及与键名对应的键值。
JSON键/值(即键名/键值)对是用来保存对象的一种方式。键/值对组合中的键名写在前面并用双引号“”包裹,使用冒号:分隔,然后紧接着键值。例如,classname:”Ace”,其中classname为键名,Ace为键值。键值的数据类型包括数值型(Integer)、长整型(Long)、字符串型(String)、布尔类型(Boolean)、浮点型(Float)、双精度浮点型(Double)。
本实施例中,获取各JSON对象的键名、与键名对应的键值以及键值的数据类型。
由于键名和键值有特殊的格式,可通过对该特殊格式前后的字符串进行分析,得到键名、键值和键值的数据类型。
具体地,通过字符串分析,获取各JSON对象的键名、与键名对应的键值以及键值的数据类型。
即利用JSON对象的键/值对的表达方式,分析”:”前后的字符串,得到对JSON对象的键名和与键名对应的键值,并分析得到键值的数据类型。
S208:根据键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应。
JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于Javabean是基于Java语言的,因此Javabean不依赖平台,具有可重复利用,易编写维护,可安装于Java运行环境的平台上使用、不重要重新编译的优点。Java类(JavaBean)是一种JAVA语言写成的可重用组件,JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,属性名称符合这种模式,其他Java类可以通过自省机制发现和操作这些JavaBean的属性。
Java类的字段名(Field)即数据处理的对象,Java类的字段名与JSON对象的键名对应,即Java类的字段名为JSON对象的键名。JAVA字段名的数据类型与JSON对象的键值的数据类型对应,即JAVA字段名的属性与JSON对象的键值的数据类型一致。一个实施例中字段名的属性与键值的数据类型对应关系表如表1所示。
表1字段名的属性与键值的数据类型对应关系表
Figure BDA0001439162440000051
S210:根据键名在JSON对象中反射得到Java类的各字段名的字段值。
字段值即字段名对应的值。由于Java类的各字段名与对应JSON对象的键名对应,因此,分别遍历各Java类的各字段名,利用各字段名(即键名)在JSON对象中反射得到各字段名的字段值,从而将JSON数据解析复旦Java格式的字段各和字段值,得到对应的Java类,开发人员可以直接使用解析后的Java类进行开发。
上述的JSON数据解析方法,定义了JSON数据转换为JavaBean的规则,该规则仅涉及JSON结构,即通过解析JSON数据的数据结构,获取各JSON对象,并对各JSON对象进行转换得到Java类。由于该规则基于数据结构出发,不涉及待开发的应用程序相关的内容,即与待开发的应用程序无关。因此,该JSON数据解析方法的应用范围不受限制,能够应用到各种应用软件的开发场景,具有较高的复用性。
具体地,一个实施例中,解析JSON数据结构,获取各JSON对象的步骤的流程图如图3所示,该步骤包括以下步骤S302至步骤S306:
S302:通过JSON数据的数据结构对应的特殊格式符,识别得到JSON数据的数据结构。
特殊格式符为该数据结构中特有的符号,基于该特殊格式符,能够识别对应的数据结构。
具体地,JSON对象(JSONObject)是以“{}”包裹起来的对象,通过识别“{}”符号,确定数据结构为Java对象。
而JSON数组(JSONArray)则是以“[]”包裹起来的数组,通过识别“[]”符号,确定数据结构为Java数组。
S304:当数据结构为对象时,获取JSON对象。
此处的JSON对象为根节点JSON对象,即不是嵌套在JSON数组中的JSON对象。
S306:当数据结构为数组时,解析数组结构,获取子元素为对象的JSON对象。
JSON数组是子元素的有序集合,每个子元素都有一个索引值(即下标),子元素的数据结构可以为JSON对象,也可以为JSON数组,通过解析JSON数组,获取子元素为对象的JSON对象。可以理解的是,获取的子元素为对象的JSON对象应当包括JSON数组中所有的JSON对象,即包括多重嵌套的所有子元素为对象的JSON数据。
具体地,解析数组结构,获取子元素为对象的JSON对象的步骤的流程图如图4所示,该步骤包括以下步骤S402至步骤S406:
S402:针对数组,解析数据结构。
JSON数组可以嵌套JSON对象和JSON数组,即子元素的数据结构可以为JSON对象,也可以为JSON数组,JSON对象(JSONObject)是以“{}”包裹起来的对象,通过识别“{}”符号,确定子元素的数据结构为Java对象。而JSON数组(JSONArray)则是以“[]”包裹起来的数组,通过识别“[]”符号,确定子元素的数据结构为Java数组。解析数组结构的方法与JSON数据的数据结构解析方相同,基于数组结构对应的特殊格式符,识别得到JSON数据的数据结构。
S404:判断数组的子元素的类型。
当数组的子元素为子对象时,执行步骤S406:获取子元素为对象的JSON对象。
当数组的子元素为子数组时,返回步骤S402:针对数组,解析数组结构。
即当JSON数组嵌套JSON数组时,返回针对数组,解析数组结构的步骤,直至遍历完该数组。
在解析得到JSON对象后,获取各JSON对象的键名、与键名对应键值以及键值的数据类型,并根据键名和键值的数据类型,将各JSON对象进行转换,即针对每一JSON对象,对应一个Java类。针对数组,其转换过程包括以下三种情况:
1、子元素为基础类型,即子元素为数值型(Integer)、长整型(Long)、字符串型(String)、布尔类型(Boolean)、浮点型(Float)、双精度浮点型(Double)等,根据表1所示的字段名的属性与键值的数据类型对应关系表进行强制转换。
2、子元素为对象(JSONObject),则根据键名和键值的数据类型,将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应,Java类的字段名的数据类型与JSON对象的键值的数据类型对应。
3、子元素为数组(JSONArray),则重新就该子数组的子元素的结构进行解析,根据上述的第一种情况和第二种情况进行转换。
子元素为数组时,由于JSONArray里的JSONArray不具有键值,为便于转换,本实施例中将父数组的键值和子数组的索引值作为的子数据的键名。
具体地,请继续参阅图4,当数组的子元素为子数组时,执行步骤S408:根据对应的父数组的键值和子数组的索引值得到子数据的键名。并在步骤S408之后,返回步骤S402,针对数组,解析数组结构。
而在实际应用中,数组的子元素可能包括至少一个或多个子对象,而子对象可能没有键名,则在转换的过程中,根据键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名的步骤包括以下步骤S1至S3:
S1:将数组的所有子对象转换成一个Java类。
S2:根据父数组的键名确定各不具有键值的子对象的键名。
父数组即子元素的上一节点对应的数组,即根据父数组的键名确定各不具有键值的子对象的键名。在具体的实施方式中,不具有键值的子对象的键名即其父数组的键名。
S3:分别根据子对象的键名和子对象对应的索引值得到Java类中各索引值对应的字段名。
即各索引值分别具有各自的字段名,且字名段应当包括子对象的全部属性,即子对象的键名和子对象的索引值。在其它的实施方式中,若子对象还具有其它的属性,该索引值对应的字段名,应当也全部包括,避免因遗漏属性,不能正确地反射得到该字段名对应的字段值的情况。
对于数组的子元素的具有键值的子对象,根据对象的转换规则进行转换,即根据键名和键值的数据类型,将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应,Java类的字段名的数据类型与JSON对象的键值的数据类型对应。
上述的方法,通过对不具有键名的情况进行分析并定义了对应的键名,避免因遗漏属性,不能正确地反射得到该字段名对应的字段值的情况。
在一个实施例中,一种JSON数据解析方法的流程图如图5所示。应该理解的是,虽然图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
具体地,该方法包括以下步骤:
S502:获取JSON数据。
S504:通过JSON数据的数据结构对应的特殊格式符,识别得到JSON数据的数据结构。
特殊格式符为该数据结构中特有的符号,基于该特殊格式符,能够识别对应的数据结构。
具体地,JSON对象(JSONObject)是以“{}”包裹起来的对象,通过识别“{}”符号,确定数据结构为Java对象。
而JSON数组(JSONArray)则是以“[]”包裹起来的数组,通过识别“[]”符号,确定数据结构为Java数组。
S506:当数据结构为对象时,获取JSON对象。
此处的JSON对象为根节点JSON对象,即不是嵌套在JSON数组中的JSON对象。
S508:当数据结构为数组时,针对数组,解析数组结构。
JSON数组可以嵌套JSON对象和JSON数组,即子元素的数据结构可以为JSON对象,也可以为JSON数组。
S510:判断数组的子元素的类型。若是对象,则执行步骤S512,若则数组,则执行步骤S514。
S512:获取子元素为对象的JSON对象。
S514:根据对应的父数组的键值和子数组的索引值得到子数据的键名。
步骤S514之后,返回步骤S508。
步骤S512和步骤S506之后,还包括步骤:
S516:获取各JSON对象的键名、与键名对应的键值以及键值的数据类型。
具体地,通过字符串分析,获取各JSON对象的键名、与键名对应的键值以及键值的数据类型。
S518:根据键名和键值的数据类型,将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应,Java类的字段名的数据类型与JSON对象的键值的数据类型对应。
其中,当数组的子元素包括不具有键值的子对象时,根据键名和键值的数据类型,将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名的步骤包括以下步骤S1至S3:
S1:根据键值的数据类型,将数组的所有的不具有键值的子对象转换成一个Java类。
S2:根据父数组的键名确定各不具有键值的子对象的键名。
S3:分别根据子对象的键名和子对象对应的索引值得到Java类中各索引值对应的字段名。
S520:根据键名在JSON对象中反射得到Java类的各字段名的字段值。
上述的实施例中,定义了JSON数据转换为JavaBean的规则,该规则仅涉及JSON结构,即通过解析JSON数据的数据结构,获取各JSON对象,并对各JSON对象进行转换得到Java类。由于该规则基于数据结构出发,不涉及待开发的应用程序相关的内容,即与待开发的应用程序无关。因此,该JSON数据解析方法的应用范围不受限制,能够应用到各种应用软件的开发场景,具有较高的复用性为进一步的提高开发效率,基于该JSON数据解析方法的程序提供API接口。通过调用API接口,各种JSON内容都能够自动解析与JavaBean赋值,实现了任意JSON内容到JavaBean的转化,开发人员可以直接使用解析后的JavaBean进行开发,提高了开发效率。
在一个实施例中,提供一种JSON数据解析装置,如图6所示,包括获取模块602、解析模块604、键获取模块606、转换模块608和反射模块610。
获取模块602,用于获取JSON数据。
解析模块604,用于解析JSON数据的数据结构,获取各JSON对象。
键获取模块606,用于获取各JSON对象的键名以及与键名对应的键值。
转换模块608,用于根据键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,Java类的字段名与对应JSON对象的键名对应。
反射模块610,用于根据键名在JSON对象中反射得到Java类的各字段名的字段值。
上述的JSON数据解析装置,定义了JSON数据转换为JavaBean的规则,该规则仅涉及JSON结构,即通过解析JSON数据的数据结构,获取各JSON对象,并对各JSON对象进行转换得到Java类。由于该规则基于数据结构出发,不涉及待开发的应用程序相关的内容,即与待开发的应用程序无关。因此,该JSON数据解析方法的应用范围不受限制,能够应用到各种应用软件的开发场景,具有较高的复用性。
图7为另一个实施例的JSON数据解析装置的结构示意图。如图7所示,解析模块604包括:数据结构获取模块和对象获取模块。
其中,数据结构识别模块、用于通过JSON数据的数据结构对应的特殊格式符,识别得到JSON数据的数据结构。
对象获取模块,用于当数据结构为对象时,获取JSON对象;当数据结构为数组时,解析数组结构,获取子元素为对象的JSON对象。
在再一个实施例中,数据结构识别模块,还用于针对数组,解析数组结构,还用于在数组的子元素为子数组时,针对数组解析数组结构。
对象获取模块,还用于当数组的子元素为子对象时,获取子元素为对象的JSON对象。
以又一个实施例中,转换模块608,还用于将数组的所有的不具有键值的子对象转换成一个Java类,根据父数组的键名确定各不具有键值的子对象的键名,并分别根据子对象的键名和子对象对应的索引值得到Java类中各索引值对应的字段名。
在一个实施例中,、根据权利要求9的装置,其特征在于,键获取模块606,还用于当数组的子元素为子数组时,根据对应的父数组的键值和子数组的索引值得到子数据的键名。
在又一个实施例中,键获取模块,还用于通过字符串分析,获取各JSON对象的键名以及与键名对应的键值。
一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述方法的步骤。
图8示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的终端110。如图8所示,该计算机设备包括该计算机设备包括通过***总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现JSON数据解析方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行JSON数据解析方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的JSON数据解析装置可以实现为一种计算机程序的形式,计算机程序可在如图8所示的计算机设备上运行。计算机设备的存储器中可存储组成该JSON数据解析装置的各个程序模块,比如,图6所示的获取模块、解析块和转换模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的JSON数据解析方法中的步骤。
例如,图8所示的计算机设备可以通过如图6所示的JSON数据解析装置中的获取模块执行获取JSON数据的步骤。计算机设备可通过转换模块执行根据所述键名将各JSON对象进行转换,得到各JSO的步骤。
一种可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (12)

1.一种JSON数据解析方法,包括:
获取JSON数据;
通过JSON数据的数据结构对应的特殊格式符,识别得到所述JSON数据的数据结构;
当数据结构为数组时,解析所述数组结构,获取子元素为对象的JSON对象;
获取各JSON对象的键名以及与所述键名对应的键值;
根据所述键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,所述Java类的字段名与对应JSON对象的所述键名对应;其中,当所述数组的子元素包括不具有键名的子对象时,所述根据所述键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名的步骤包括:将所述数组的所有的不具有键名的子对象转换成一个Java类;根据父数组的键名确定各不具有键名的子对象的键名;分别根据所述子对象的键名和子对象对应的索引值得到所述Java类中各索引值对应的字段名;所述索引值为子元素的下标;
根据所述键名在所述JSON对象中反射得到所述Java类的各字段名的字段值。
2.根据权利要求1所述的方法,其特征在于,在所述通过JSON数据的数据结构对应的特殊格式符,识别得到所述JSON数据的数据结构之后,还包括:当所述数据结构为对象时,获取JSON对象。
3.根据权利要求1所述的方法,其特征在于,解析所述数组结构,获取子元素为对象的JSON对象步骤,包括:
针对数组,解析数组结构;
当所述数组的子元素为子对象时,获取子元素为对象的JSON对象;
当所述数组的子元素为子数组时,返回所述针对数组,解析数组结构的步骤。
4.根据权利要求3所述的方法,其特征在于,当所述数组的子元素为子数组时,根据对应的所述父数组的键值和所述子数组的索引值得到所述子数组的键名。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述获取各JSON对象的键名以及与所述键名对应的键值的步骤,包括:
通过字符串分析,获取各JSON对象的键名以及与所述键名对应的键值。
6.一种JSON数据解析装置,包括获取模块、解析模块、键获取模块、转换模块和反射模块:
所述获取模块,用于获取JSON数据;
所述解析模块,用于通过JSON数据的数据结构对应的特殊格式符,识别得到所述JSON数据的数据结构;当数据结构为数组时,解析所述数组结构,获取子元素为对象的JSON对象;
所述键获取模块,用于获取各JSON对象的键名以及与所述键名对应的键值;
所述转换模块,用于根据所述键名将各JSON对象进行转换,得到各JSON对象对应的Java类及Java类的各字段名,所述Java类的字段名与对应JSON对象的所述键名对应;其中,当所述数组的子元素包括不具有键名的子对象时,所述转换模块,用于将所述数组的所有的不具有键名的子对象转换成一个Java类;根据父数组的键名确定各不具有键名的子对象的键名;分别根据所述子对象的键名和子对象对应的索引值得到所述Java类中各索引值对应的字段名;所述索引值为子元素的下标;
所述反射模块,用于根据所述键名在所述JSON对象中反射得到所述Java类的各字段名的字段值。
7.根据权利要求6所述的装置,其特征在于,所述解析模块,用于当所述数据结构为对象时,获取JSON对象。
8.根据权利要求6所述的装置,其特征在于,所述数据结构识别模块,还用于针对数组,解析数组结构,还用于在所述数组的子元素为子数组时,针对数组解析数组结构;
所述对象获取模块,还用于当所述数组的子元素为子对象时,获取子元素为对象的JSON对象。
9.根据权利要求8所述的装置,其特征在于,所述键获取模块,还用于当所述数组的子元素为子数组时,根据对应的所述父数组的键值和所述子数组的索引值得到所述子数组的键名。
10.根据权利要求6至9任一项所述的装置,其特征在于,所述键获取模块,还用于通过字符串分析,获取各JSON对象的键名以及与所述键名对应的键值。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至5中任一项所述方法的步骤。
12.一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至5中任一项所述方法的步骤。
CN201710979911.7A 2017-10-19 2017-10-19 Json数据解析方法、装置、计算机设备和存储介质 Active CN109684607B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710979911.7A CN109684607B (zh) 2017-10-19 2017-10-19 Json数据解析方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710979911.7A CN109684607B (zh) 2017-10-19 2017-10-19 Json数据解析方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN109684607A CN109684607A (zh) 2019-04-26
CN109684607B true CN109684607B (zh) 2022-04-08

Family

ID=66183822

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710979911.7A Active CN109684607B (zh) 2017-10-19 2017-10-19 Json数据解析方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN109684607B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111107042B (zh) * 2018-10-26 2021-03-09 广州汽车集团股份有限公司 报文解析方法、装置、计算机设备和存储介质
CN110222008A (zh) * 2019-05-06 2019-09-10 平安国际智慧城市科技股份有限公司 一种数据格式的转换方法、***、介质及电子设备
CN110554877A (zh) * 2019-09-05 2019-12-10 北京博睿宏远数据科技股份有限公司 一种json数据解析方法、装置、设备及储存介质
CN112882974B (zh) * 2021-02-09 2024-01-05 深圳市云网万店科技有限公司 一种json数据转换方法、装置、计算机设备和存储介质
CN115567589B (zh) * 2022-09-29 2023-06-13 上海顺舟智能科技股份有限公司 Json数据的压缩传输方法、装置、设备及存储介质
CN115586904B (zh) * 2022-12-12 2023-04-07 云筑信息科技(成都)有限公司 一种基于JSON数据格式描述的Java Bean的动态生成方法
CN116738252B (zh) * 2023-07-12 2024-01-05 上海中汇亿达金融信息技术有限公司 基于模糊匹配的配置加载方法、装置及应用
CN116610679B (zh) * 2023-07-17 2023-10-17 金锐同创(北京)科技股份有限公司 json数据的解析方法、装置、计算机设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455381A (zh) * 2012-05-29 2013-12-18 国际商业机器公司 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和***
CN106598922A (zh) * 2016-12-23 2017-04-26 Tcl集团股份有限公司 一种字符串转换方法及***
CN107220096A (zh) * 2017-04-20 2017-09-29 北京小度信息科技有限公司 一种json数据解析方法及装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8533665B2 (en) * 2009-11-16 2013-09-10 Cisco Technology, Inc. Generating object annotations
CN102158482B (zh) * 2011-03-10 2013-11-20 易程(苏州)软件股份有限公司 基于json数据协议的客运信息通信方法及***
CN102508674A (zh) * 2011-12-02 2012-06-20 方正国际软件有限公司 基于json进行对象化参数传递的方法及***
US9588742B2 (en) * 2013-09-20 2017-03-07 Oracle International Corporation Rule-based automatic class generation from a JSON message
CN105138683B (zh) * 2015-09-15 2018-06-15 歌尔股份有限公司 Json数据转二维数组的方法及***
CN105808262B (zh) * 2016-03-11 2018-10-19 浙江工业大学 一种基于json格式数据的命名匹配方法
CN105787128B (zh) * 2016-03-29 2019-04-23 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法
CN106649634A (zh) * 2016-12-08 2017-05-10 武汉斗鱼网络科技有限公司 一种解析json数据的方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455381A (zh) * 2012-05-29 2013-12-18 国际商业机器公司 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和***
CN106598922A (zh) * 2016-12-23 2017-04-26 Tcl集团股份有限公司 一种字符串转换方法及***
CN107220096A (zh) * 2017-04-20 2017-09-29 北京小度信息科技有限公司 一种json数据解析方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
代码工具1.自动根据json字符串生成javabean类;般若梦;《https://blog.csdn.net/loveghs/article/details/49149913》;20151015;1-10页 *

Also Published As

Publication number Publication date
CN109684607A (zh) 2019-04-26

Similar Documents

Publication Publication Date Title
CN109684607B (zh) Json数据解析方法、装置、计算机设备和存储介质
US10618137B2 (en) Automated constructing method of cloud manufacturing service and cloud manufacturing system
CN108932122B (zh) 接口文档生成方法、装置、计算机设备和存储介质
CN109325009B (zh) 日志解析的方法及装置
CN108804159B (zh) javascript模块加载方法及其预处理方法、装置和计算机设备
CN106022483B (zh) 机器学习模型之间进行转换的方法与设备
CN110069297B (zh) 基于Spring MVC的异常处理方法、装置、计算机设备和存储介质
CN109840083B (zh) 网页组件模板构建方法、装置、计算机设备和存储介质
CN109597618B (zh) 程序开发方法、装置、计算机设备及存储介质
US20210064453A1 (en) Automated application programming interface (api) specification construction
CN110221871B (zh) 网页获取方法、装置、计算机设备及存储介质
CN110365724B (zh) 任务处理方法、装置及电子设备
US20200142674A1 (en) Extracting web api endpoint data from source code
CN112187713B (zh) 报文转换的方法、装置、计算机设备和存储介质
CN115599359A (zh) 一种代码生成方法、装置、设备及介质
CN111709026A (zh) 静态安全检测方法、装置、计算机设备和存储介质
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN113419740A (zh) 程序数据流的分析方法、装置、电子设备及可读存储介质
CN106502707B (zh) 代码生成方法及装置
CN115202756A (zh) 基于Vue的组件加载方法、***和电子设备
CN112417020A (zh) 业务扩展的实现方法、装置、计算机设备和存储介质
CN110647568A (zh) 一种图数据库数据转化为编程语言数据方法及装置
CN113608745B (zh) 一种初始化用户权限的方法及存储介质
CN115390912B (zh) 资源发现方法、装置、计算机设备和存储介质
CN116450976A (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