CN109857389A - 模型数据生成方法、装置、计算机设备及存储介质 - Google Patents
模型数据生成方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN109857389A CN109857389A CN201910032028.6A CN201910032028A CN109857389A CN 109857389 A CN109857389 A CN 109857389A CN 201910032028 A CN201910032028 A CN 201910032028A CN 109857389 A CN109857389 A CN 109857389A
- Authority
- CN
- China
- Prior art keywords
- data
- model
- dictionary
- class
- resolved
- 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.)
- Granted
Links
Abstract
本发明提供一种模型数据生成方法、装置、计算机设备及存储介质,该模型数据生成方法包括:S1,获取文件数据;S2,根据文件数据获取待解析字典;S3,根据待解析字典对应的第一模型类的预设类名,生成第一模型类的声明部分和实现部分;S4,获取待解析字典中各数据的类型,若数据为字符串、bool、number或date型数据,则执行步骤S5,若数据为数组型数据,则执行步骤S6,若数据为字典型数据,则执行步骤S7;S5,解析字符串、bool、number或date型数据;S6,解析数组型数据;S7,解析字典型数据;S8,将所述步骤S3、S5、S6和S7的结果作为待生成的模型数据。本发明不依赖于任何第三方工具,无需手动输入代码,增加了开发效率,而且避免了手动输入带来的安全隐患。
Description
技术领域
本发明涉及iOS开发领域,尤其涉及一种模型数据生成方法、装置、计算机设备及存储介质。
背景技术
在iOS应用开发中,客户端向服务器发送交互请求后,服务器将向客户端返回交互请求的响应数据,返回的数据一般为JSON、XML格式。作为前端开发者,当收到返回数据时需将其转化为开发中方便使用的数据结构,这种根据网络响应数据创建的数据结构称为模型。模型在开发过程中可被用于本地数据传输、持久化等过程,并且能够在编译器的支持下提供内部模型属性的快速访问。在某些情况下,前端开发者也可能需要根据自己创建的PLIST格式文件数据生成模型。
目前iOS应用开发中常见的模型数据生成方法主要有如下四种:
1)第一种方案,使用系统自带的数据结构NSDictionary来存储解析后的网络响应数据,此方案只需要一次解析即可完成模型的转换,但使用起来不方便,主要表现为通过手写键值来访问内部属性值,容易因拼写错误导致访问不到目标内部属性值,同时获取到内部属性值后没有类型检查,存在一定的安全隐患。
2)第二种方案,使用根据服务器返回的数据结构手动创建对应的模型数据结构,在iOS中,这就需要手动创建模型类,根据服务器返回数据的结构声明一个个的属性,然后手动实现由网络响应数据解析得到NSDictionary转换为模型类的逻辑,此方案的优点是能够在编译器的支持下提供内部属性的快速访问,但开发效率低,如果项目中这样的模型非常多则需要手写大量重复的代码。
3)第三种方案,是使用Mantle、JSONModel等第三方数据库来帮助创建模型类,此方案中只需要继承相应的类,然后根据服务器返回的数据结构手写对应的属性即可完成第二种方案中所有的功能,大大的简化了开发流程。但此方案仍需要手写属性,面对大量的建模需求效率不高,而且还可能会因拼写错误引入一些安全隐患,而这些隐患带来的问题通常也不太容易发现。
4)第四种方案,见发明名称为《一种模型数据生成方法和系统》、申请号为201710041642.X的专利申请,该方案最终生成的模型类都是基于Mantle、JSON Model等第三方库的模型的子类,这使得生成的模型类能够在编译器的支持下提供内部属性的快捷访问,避免通过键值对访问带来的安全性问题。同时,该方法通过提供模型类的文件模板以及自动化脚本,直接接收一个JSON(XML)字符串作为输入,通过自动化脚本解析并生成输出包含完整信息的模型类文件,从而避免了模型类属性和相关方法的手动书写,进而避免了手动书写带来的安全隐患。然而,该方案依赖于Mantle、JSON Model等第三方工具字典。
发明内容
针对上述现有技术的不足,本发明的目的在于提供一种用于IOS应用开发的高效便捷安全的模型数据生成方法、装置、计算机设备及存储介质,从而无需手动输入模型属性,避免手动输入带来的安全隐患,而且不依赖任何第三方工具。
为了实现上述目的,本发明提供一种模型数据生成方法,包括以下步骤:
S1,获取待生成模型数据的文件数据;
S2,判断所述文件数据是否为字典型,若是,则将所述文件数据作为待解析字典,否则,将所述文件数据转换成字典,作为待解析字典;
S3,根据所述待解析字典对应的第一模型类的预设类名,生成所述第一模型类的声明部分和实现部分;
S4,获取所述待解析字典中各数据的类型,若数据为字符串、bool、number或date型数据,则执行步骤S5,若数据为数组型数据,则执行步骤S6,若数据为字典型数据,则执行步骤S7;
S5,根据所述数据的类型和键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分;
S6,判断数组型数据中的数据是否为字典,若是,则根据所述数组型数据对应的第二模型类的预设类名以及所述数组型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第二模型类的预设类名生成所述第二模型类的声明部分和实现部分,并将所述数组型数据中的字典作为新的待解析字典,将所述第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,而后返回至所述步骤S4,否则,根据所述数组型数据的键生成相应的模型属性并存入所述待解析字典对应的模型类的声明部分;
S7,根据所述字典型数据对应的第三模型类的预设类名以及所述字典型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第三模型类的预设类名生成所述第三模型类的声明部分和实现部分,并将所述字典型数据作为新的待解析字典,将所述第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,而后返回至所述步骤S4;
S8,将所述步骤S3、S5、S6和S7生成的结果作为待生成的模型数据。
进一步地,所述步骤S1中获取的文件数据为JSON、XML、Plist或字典格式。
进一步地,所述步骤S2还包括:若所述文件数据转换成字典时失败,则输出相应的提示信息并结束流程。
进一步地,所述模型数据生成方法还包括:将所述模型数据存入本地存储器。
进一步地,在将所述模型数据存入所述本地存储器时,首先判断所述本地存储器中的目标存储位置是否被占用,若是,则查找所述本地存储器中未被占用的空闲存储位置,并将所述模型数据存入所述空闲存储位置。
进一步地,所述模型数据生成方法还包括:对所述本地存储器中存储的所述模型数据进行去重处理。
进一步地,所述模型数据生成方法还包括:打印所述本地存储器中存储的所述模型数据。
为了实现上述目的,本发明还提供一种模型数据生成装置,包括:
文件数据获取模块,用于获取待生成模型数据的文件数据;
待解析字典确定模块,用于判断所述文件数据是否为字典型,若是,则将所述文件数据作为待解析字典,否则,将所述文件数据转换成字典,作为待解析字典;
外层字典模型类生成模块,用于根据所述待解析字典对应的第一模型类的预设类名,生成所述第一模型类的声明部分和实现部分;
数据类型获取模块,用于获取所述待解析字典中各数据的类型;
基础型数据解析模块,用于在所述待解析字典中的数据为字符串、bool、number或date型时,根据所述数据的类型和键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分;
数组型数据解析模块,用于在所述待解析字典中的数据为数组型数据时,判断所述数组型数据中的数据是否为字典,若是,则根据所述数组型数据对应的第二模型类的预设类名以及所述数组型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第二模型类的预设类名生成所述第二模型类的声明部分和实现部分,并将所述数组型数据中的字典作为新的待解析字典传递至所述数据类型获取模块,将所述第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,否则,根据所述数组型数据的键生成相应的模型属性并存入所述待解析字典对应的模型类的声明部分;
字典型数据解析模块,用于在所述待解析字典中的数据为字典型数据时,根据所述字典型数据对应的第三模型类的预设类名以及所述字典型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第三模型类的预设类名生成所述第三模型类的声明部分和实现部分,并将所述字典型数据作为新的待解析字典传递至所述数据类型获取模块,将所述第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分;
模型数据生成模块,用于将所述外层字典模型类生成模块、基础型数据解析模块、数组型数据解析模块和字典型数据解析模块生成的结果作为待生成的模型数据。
进一步地,所述文件数据获取模块获取的文件数据为JSON、XML、Plist或字典格式。
进一步地,所述待解析字典确定模块在将所述文件数据转换成字典时若失败,则输出相应的提示信息。
进一步地,所述模型数据生成装置还包括:模型数据存储模块,用于将所述模型数据存入本地存储器。
进一步地,所述模型数据存储模块在将所述模型数据存入所述本地存储器时,首先判断所述本地存储器中的目标存储位置是否被占用,若是,则查找所述本地存储器中未被占用的空闲存储位置,并将所述模型数据存入所述空闲存储位置。
进一步地,所述模型数据生成装置还包括:去重模块,用于对所述本地存储器中存储的所述模型数据进行去重处理。
进一步地,所述模型数据生成方法还包括:打印模块,用于打印所述本地存储器中存储的所述模型数据。
为了实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现前述方法的步骤。
为了实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法的步骤。
通过采用上述技术方案,本发明具有如下有益效果:
当用户需要根据后台返回的JSON、XML等格式文件数据或者自己创建的PLIST、字典等格式文件数据创建模型数据时,无需手动输入代码,大大增加了开发效率,而且避免了手动输入带来的安全隐患。同时,本发明不依赖于任何第三方工具,并且可以解析多层嵌套的数据文件而得到模型数据。
附图说明
图1为本发明模型数据生成方法的一个实施例的流程图;
图2为本发明模型数据生成装置的一个实施例的结构框图;
图3为本发明计算机设备的硬件架构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明的模型数据生成方法用于根据后台返回的JSON、XML等文件数据或者用户自己创建的PLIST、字典(NSDictionary)等文件数据生成模型文件,如图1所示,该方法包括如下步骤:
S1,获取待生成模型数据的文件数据。
S2,判断文件数据是否为字典型,若是,则将文件数据作为待解析字典,否则,将文件数据转换成字典,若转换成功,则将转换得到的字典作为待解析字典,否则,输出相应的提示信息并结束流程。在本步骤确定好待解析字典后,通过如下步骤S3~S7对待解析字典进行逐层解析,解析生成的结果即为待生成的模型数据。
其中,字典NSDictionary是多个数据的key:value键值对的集合,键值对之间无序,键值对用冒号“:”或“=”表示,key必须是不可变的,一般使用字符串作为字典中的key,也可以使用数字等不可变类型的值,value可以是任意类型,并且可允许多层字典嵌套,一层字典对应一个大括号{}。本发明将JSON、XML、Plist文件数据转换成字典的方法是本领域公知的,可以采用多种现有开源工具实现。
S3,根据待解析字典对应的第一模型类的预设类名,生成第一模型类的声明部分和实现部分并存入本地存储器。例如,假设待解析字典对应的第一模型类的类名预设为JSONTestModel,则生成的第一模型类JSONTestMdoel的声明部分包括开始语“@interfaceJSONTestModel:NSObject”和对应的结束语“@end”;模型类JSONTestMdoel的实现部分包括开始语“@implementation JSONTestModel:NSObject”和对应的结束语“@end”。
S4,获取待解析字典中各数据的类型,若数据为字符串、bool、number或date型数据,则执行步骤S5,若数据为数组型数据,则执行步骤S6,若数据为字典型数据,则执行步骤S7,若数据为非字符串、bool、number、date、数组或字典型,则输出相应提示并结束流程。
S5,解析基础型数据:根据数据的类型和Key生成相应的模型属性并添加至该数据所属的待解析字典对应的第一模型类的声明部分。例如,假设某数据的类型为字符串型、Key为A,则生成如下模型属性“@property(strong,nonatomic)NSString*A”;假设某数据的类型为bool型、Key为B,则生成如下模型属性“@property(strong,nonatomic)NSBool*B”;假设某数据的类型为bool型、Key为C,则生成如下模型属性“@property(strong,nonatomic)NSNumber*C”;假设某数据的类型为date型、Key为D,则生成如下模型属性“@property(strong,nonatomic)NSDate*D”。而后,将该模型属性添加至待解析字典对应的模型类JSONTestModel的声明部分,即,添加至相应声明部分的开始语“@interfaceJSONTestModel:NSObject”与结束语“@end”之间。
S6,解析数组型数据:判断数组型数据中的数据是否为字典,若是,则根据数组型数据对应的第二模型类的预设类名以及该数组型数据的类型和Key生成相应的模型属性并添加至该数组型数据所属的待解析字典对应的第一模型类的声明部分,同时根据第二模型类的预设类名生成第二模型类的声明部分和实现部分并存入本地存储器,并将该数组型数据中的字典作为新的待解析字典,将第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,返回至步骤S4。例如,假设某数组型数据的key为car,数组中的数据为字典型,数组对应的第二模型类的类名预设为CarModel,则生成相应模型属性“@property(strong,nonatomic)NSArray<CarModel*>*car”,生成模型类CarModel的声明部分包括开始语“@interface CarModel:NSObject”和结束语“@end”,生成模型类CarModel的实现部分包括开始语“@implementation CarModel”和结束语“@end”;而后,将数组中的字典作为新的待解析字典返回至步骤S4对其进行解析,并将对其解析的内容添加至模型类CarModel的声明部分。
当数组型数据中的数据为空或者为非字典时,根据数组型数据的Key生成相应的模型属性并存入该数组型数据所属的待解析字典对应的第一模型类的声明部分即可,无需继续对数组进行解析。例如,假设某数组型数据中的数据为字符串型,其key为car,则生成对应的模型属性“@property(strong,nonatomic)NSArray*car”即可。
S7,解析字典型数据:根据字典型数据对应的第三模型类的预设类名以及该字典型数据的Key生成相应的模型属性并添加至该字典型数据所属的待解析字典对应的第一模型类的声明部分,同时根据第三模型类的预设类名生成第三模型类的声明部分和实现部分并存入本地存储器,并将该字典型数据作为新的待解析字典、以及将第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,返回至步骤S4。例如,假设某字典型数据的key为user,其对应的第三模型类的预设名为UserModel,则生成相应模型属性“@property(strong,nonatomic)UserModel*user”,生成模型类UserModel的声明部分包括开始语“@interface UserModel:NSObject”和结束语“@end”,生成模型类CarModel的实现部分包括开始语“@implementation UserModel”和结束语“@end”;而后,将字典型数据作为新的待解析字典返回至步骤S4对其进行解析,并将对其解析的内容添加至模型类CarModel的声明部分;
S8,将步骤S3、S5、S6和S7生成的相应模型属性、声明部分、实现部分作为待生成的模型数据。
在本实施例中,上述步骤S3、S5、S6和S7将生成的相应模型属性、声明部分、实现部分存入本地存储器时,首先判断本地存储器中的目标存储位置是否被占用,若是,则查找本地存储器中未被占用的空闲存储位置,并将待存储的内容存入查找到的空闲存储位置。此外,本发明在将相应模型属性、声明部分、实现部分存入本地存储器后,对存储的内容进行了去重处理,以去除相同的内容。
为了在IOS项目中使用模型数据,本实例首先将存储的模型数据打印至TXT文本中;而后,新建模型文件,并将打印出的模型数据复制到新建的模型文件中,其中,新建的模型文件包括.h模型文件和.m模型文件,例如,分别命名为JSONTestMdoel.h和JSONTestModel.m;最后,将打印出的模型数据中的所有声明部分复制到.h模型文件中,所有实现部分复制到.m模型文件中,并将生成的模型文件JSONTestMdoel.h和JSONTestModel.m添加到IOS项目中。
以下如待解析字典为例进一步说明本实施步骤S3~S7的解析过程:
首先,假设待解析字典对应的模型类的类名预设为JSONTestModel,则生成模型类JSONTestModel的声明部分(包括开始语“@interface JSONTestModel:NSObject”和对应的结束语“@end”)和实现部分(包括开始语“@implementation JSONTestModel:NSObject”和结束语“@end”)并存入本地存储器。
然后,对第一层字典(即最外层大括号对应的字典)中的数据进行解析,第一层字典包括三个数据,三个数据对应的Key分别是data、retcode和retmsg。
对于Key为retcode和retmsg的数据,由于retcode对应的数据是number型,retmsg对应的数据是字符串型,则直接生成对应的模型属性,即分别生成“@property(strong,nonatomic)NSString*retcode”和“@property(strong,nonatomic)NSNumber*retmsg”两句模型属性。而后,将生成的模型属性存入第一层字典对应的模型类(即模型类JSONTestModel)的声明部分,即存入该模型类声明部分的开始语“@interfaceJSONTestModel:NSObject”与对应的结束语“@end”之间。
对于Key为data的数据,由于data对应的数据为字典型,则首先生成对应的模型属性“property(strong,nonatomic)DataModel*data”并存入模型类JSONTestModel的声明部分。而后,将该数据作为新的待解析字典,指定新的待解析字典对应的模型类的类名。在本发明中,模型类的命名规则是将对应的Key首字母大写后拼接Model字符串,即Key为data的待解析字典对应的模型类名为DataModel。指定类名后,根据指定的类名DataModel生成该模型类的声明部分和实现部分并存入本地存储器,其中,模型类DataModel的声明部分包括开始语“@interface DataModel:NSObject”和结束语“@end”;模型类DataModel的实现部分包括开始语“@implementation DataModel:NSObject”和结束语“@end”。
而后,对data对应的字典进行解析,该字典包含两个数据,两个数据对应的Key分别是loanList和counts,其中,counts对应的数据类型是number型,loanLis对应的数据类型是数组型。
对于Key为counts的数据,直接生成对应的模型属性“@property(strong,nonatomic)NSNumber*counts”,而后将生成的模型属性存入模型类DataModel的声明部分,即存入该模型类声明部分的开始语“@interface DataModel:NSObject”与对应的结束语“@end”之间。
对于Key为loanList的数据,其数据类型为数组型,首先判断数组是否非空且数组里的数据为字典。由于loanList对应的数组非空且数组里的数据为字典,则指定数组对应的模型类的类名,如LoanListModel。指定类名后,根据指定的类名LoanListModel生成对应模型类的声明部分和实现部分并存入本地存储器,其中,声明部分包括开始语“@interfaceLoanListModel:NSObject”和结束语“@end”;实现部分包括开始语“@implementationLoanListModel:NSObject”和结束语“@end”。同时,根据数组的Key和对应的模型类名生成相应的模型属性“@property(strong,nonatomic)NSArray<LoanlistModel*>*loanList”并存入当前解析字典对应的模型类DataModel的声明部分。而后,对loanList对应的数组里的字典作进一步解析,该字典中仅包含字符串型数据,因而直接生成各数据Key对应的模型属性并存入模型类LoanListModel的声明部分,即存入该模型类声明部分的开始语“@interface LoanListModel:NSObject”与对应的结束语“@end”之间,解析完成,解析得到的模型数据包括声明部分集合和实现部分集合,其中,声明部分集合如下:
@interface LoanlistModel:NSObject
@property(strong,nonatomic)NSString*applyStep;
@property(strong,nonatomic)NSString*rentStatus;
@property(strong,nonatomic)NSString*verificateStatus;
@property(strong,nonatomic)NSString*productType;
@property(strong,nonatomic)NSString*marginPayStatus;
@property(strong,nonatomic)NSString*intervalDays;
@property(strong,nonatomic)NSString*currentTerm;
@property(strong,nonatomic)NSString*isConfirm;
@property(strong,nonatomic)NSString*vehicleCode;
@property(strong,nonatomic)NSString*currentPayMon;
@property(strong,nonatomic)NSString*contractNo;
@property(strong,nonatomic)NSString*reloanDate;
@property(strong,nonatomic)NSString*marginStatus;
@property(strong,nonatomic)NSString*verificateCode;
@property(strong,nonatomic)NSString*loanStatus;
@property(strong,nonatomic)NSString*loanNo;
@property(strong,nonatomic)NSString*loanSource;
@property(strong,nonatomic)NSString*marginStep;
@property(strong,nonatomic)NSString*restAmount;
@property(strong,nonatomic)NSString*loanAmount;
@property(strong,nonatomic)NSString*loanDate;
@property(strong,nonatomic)NSString*marginPayTime;
@property(strong,nonatomic)NSString*restTerm;
@property(strong,nonatomic)NSString*vehicleDetail;
@end
@interface DataModel:NSObject
@property(strong,nonatomic)NSNumber*counts;
@property(strong,nonatomic)NSArray<LoanlistModel*>*loanList;
@end
@interface JSONTestModel:NSObject
@property(strong,nonatomic)NSString*retmsg;
@property(strong,nonatomic)NSNumber*retcode;
@property(strong,nonatomic)DataModel*data;
@end
实现部分集合如下:
@implementation LoanlistModel
@end
@implementation DataModel
@end
@implementation JSONTestModel
@end
综上所述,当用户需要根据后台返回的JSON、XML等格式文件数据或者自己创建的PLIST、字典等格式文件数据创建模型时,无需手动输入代码,大大增加了开发效率,而且避免了手动输入带来的安全隐患。同时,本发明不依赖于任何第三方工具,并且可以解析多层嵌套的数据文件而得到模型。
实施例二
本发明还提供如图2所示的模型数据生成装置,在本实施例中,模型数据生成装置10可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述模型数据生成方法。本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述模型数据生成装置10在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
文件数据获取模块101,用于获取待生成模型数据的JSON、XML、PLIS或字典格式的文件数据;
待解析字典确定模块102,用于判断所述文件数据是否为字典型,若是,则将所述文件数据作为待解析字典,否则,将所述文件数据转换成字典,若转换成功,则将转换得到的字典作为待解析字典;
外层字典模型类生成模块103,用于根据所述待解析字典对应的第一模型类的预设类名,生成所述第一模型类的声明部分和实现部分;
数据类型获取模块104,用于获取所述待解析字典中各数据的类型;
基础型数据解析模块105,用于在所述待解析字典中的数据为字符串、bool、number或date型时,根据所述数据的类型和Key生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分;
数组型数据解析模块106,用于在所述待解析字典中的数据为数组型数据时,判断所述数组型数据中的数据是否为字典,若是,则根据所述数组型数据对应的第二模型类的预设类名以及所述数组型数据的Key生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第二模型类的预设类名生成所述第二模型类的声明部分和实现部分,并将所述数组型数据中的字典作为新的待解析字典传递至所述数据类型获取模块104,将所述第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,否则,根据所述数组型数据的Key生成相应的模型属性并存入所述待解析字典对应的模型类的声明部分;
字典型数据解析模块107,用于在所述待解析字典中的数据为字典型数据时,根据所述字典型数据对应的第三模型类的预设类名以及所述字典型数据的Key生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第三模型类的预设类名生成所述第三模型类的声明部分和实现部分,并将所述字典型数据作为新的待解析字典传递至所述数据类型获取模块104,将所述第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分;
模型数据生成模块108,用于将所述外层字典模型类生成模块103、基础型数据解析模块105、数组型数据解析模块106和字典型数据解析模块107生成的结果作为待生成的模型数据。
在本实施例中,如图2所示,本发明的模型数据生成装置还包括:模型数据存储模块109,用于将模型数据存入本地存储器,并且模型数据存储模块109在将模型数据存入本地存储器时,首先判断本地存储器中的目标存储位置是否被占用,若是,则查找本地存储器中未被占用的空闲存储位置,并将模型数据存入空闲存储位置。
在本实施例中,模型数据生成装置还包括:去重模块110,用于对本地存储器中存储的模型数据进行去重处理;以及打印模块111,用于打印本地存储器中存储的模型数据,以便后续加入新建的模型文件中。
实施例三
本发明还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备20至少包括但不限于:可通过系统总线相互通信连接的存储器21、处理器22,如图3所示。需要指出的是,图3仅示出了具有组件21-22的计算机设备20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器21(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储单元,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备20的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备20的操作系统和各类应用软件,例如实施例二的模型数据生成装置10的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行模型数据生成装置10,以实现实施例一的模型数据生成方法。
实施例四
本发明还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储模型数据生成装置10,被处理器执行时实现实施例一的模型数据生成方法。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种模型数据生成方法,其特征在于,包括以下步骤:
S1,获取待生成模型数据的文件数据;
S2,判断所述文件数据是否为字典型,若是,则将所述文件数据作为待解析字典,否则,将所述文件数据转换成字典,作为待解析字典;
S3,根据所述待解析字典对应的第一模型类的预设类名,生成所述第一模型类的声明部分和实现部分;
S4,获取所述待解析字典中各数据的类型,若数据为字符串、bool、number或date型数据,则执行步骤S5,若数据为数组型数据,则执行步骤S6,若数据为字典型数据,则执行步骤S7;
S5,根据所述数据的类型和键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分;
S6,判断数组型数据中的数据是否为字典,若是,则根据所述数组型数据对应的第二模型类的预设类名以及所述数组型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第二模型类的预设类名生成所述第二模型类的声明部分和实现部分,并将所述数组型数据中的字典作为新的待解析字典,将所述第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,而后返回至所述步骤S4,否则,根据所述数组型数据的键生成相应的模型属性并存入所述待解析字典对应的模型类的声明部分;
S7,根据所述字典型数据对应的第三模型类的预设类名以及所述字典型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第三模型类的预设类名生成所述第三模型类的声明部分和实现部分,并将所述字典型数据作为新的待解析字典,将所述第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,而后返回至所述步骤S4;
S8,将所述步骤S3、S5、S6和S7生成的结果作为待生成的模型数据。
2.根据权利要求1所述的模型数据生成方法,其特征在于,所述步骤S1中获取的文件数据为JSON、XML、Plist或字典格式。
3.根据权利要求1所述的模型数据生成方法,其特征在于,所述步骤S2还包括:若所述文件数据转换成字典时失败,则输出相应的提示信息并结束流程。
4.根据权利要求1所述的模型数据生成方法,其特征在于,所述模型数据生成方法还包括:将所述模型数据存入本地存储器。
5.根据权利要求4所述的模型数据生成方法,其特征在于,在将所述模型数据存入所述本地存储器时,首先判断所述本地存储器中的目标存储位置是否被占用,若是,则查找所述本地存储器中未被占用的空闲存储位置,并将所述模型数据存入所述空闲存储位置。
6.根据权利要求4所述的模型数据生成方法,其特征在于,所述模型数据生成方法还包括:对所述本地存储器中存储的所述模型数据进行去重处理。
7.根据权利要求6所述的模型数据生成方法,其特征在于,所述模型数据生成方法还包括:打印所述本地存储器中存储的所述模型数据。
8.一种模型数据生成装置,其特征在于,包括:
文件数据获取模块,用于获取待生成模型数据的文件数据;
待解析字典确定模块,用于判断所述文件数据是否为字典型,若是,则将所述文件数据作为待解析字典,否则,将所述文件数据转换成字典,作为待解析字典;
外层字典模型类生成模块,用于根据所述待解析字典对应的第一模型类的预设类名,生成所述第一模型类的声明部分和实现部分;
数据类型获取模块,用于获取所述待解析字典中各数据的类型;
基础型数据解析模块,用于在所述待解析字典中的数据为字符串、bool、number或date型时,根据所述数据的类型和键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分;
数组型数据解析模块,用于在所述待解析字典中的数据为数组型数据时,判断所述数组型数据中的数据是否为字典,若是,则根据所述数组型数据对应的第二模型类的预设类名以及所述数组型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第二模型类的预设类名生成所述第二模型类的声明部分和实现部分,并将所述数组型数据中的字典作为新的待解析字典传递至所述数据类型获取模块,将所述第二模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分,否则,根据所述数组型数据的键生成相应的模型属性并存入所述待解析字典对应的模型类的声明部分;
字典型数据解析模块,用于在所述待解析字典中的数据为字典型数据时,根据所述字典型数据对应的第三模型类的预设类名以及所述字典型数据的键生成相应的模型属性并添加至所述待解析字典对应的第一模型类的声明部分,同时根据所述第三模型类的预设类名生成所述第三模型类的声明部分和实现部分,并将所述字典型数据作为新的待解析字典传递至所述数据类型获取模块,将所述第三模型类的声明部分作为新的待解析字典对应的第一模型类的声明部分;
模型数据生成模块,用于将所述外层字典模型类生成模块、基础型数据解析模块、数组型数据解析模块和字典型数据解析模块生成的结果作为待生成的模型数据。
9.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910032028.6A CN109857389B (zh) | 2019-01-14 | 2019-01-14 | 模型数据生成方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910032028.6A CN109857389B (zh) | 2019-01-14 | 2019-01-14 | 模型数据生成方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857389A true CN109857389A (zh) | 2019-06-07 |
CN109857389B CN109857389B (zh) | 2022-08-12 |
Family
ID=66894714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910032028.6A Active CN109857389B (zh) | 2019-01-14 | 2019-01-14 | 模型数据生成方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857389B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881059A (zh) * | 2020-08-10 | 2020-11-03 | 网易(杭州)网络有限公司 | 代码文件的检测方法、装置和电子设备 |
CN112328231A (zh) * | 2020-10-14 | 2021-02-05 | 远江盛邦(北京)网络安全科技股份有限公司 | python字典和结构体间的快速转换方法 |
CN112836475A (zh) * | 2020-11-24 | 2021-05-25 | 辽宁振兴银行股份有限公司 | 一种混合json和xml数据转为二维数组的方法 |
CN113098966A (zh) * | 2021-04-01 | 2021-07-09 | 广东三维家信息科技有限公司 | 基于跨标签页的模型复制方法、装置、终端设备及存储介质 |
CN117874393A (zh) * | 2024-03-12 | 2024-04-12 | 成都谐盈科技有限公司 | 通过xml文件构建sca模型工程的方法和系统 |
CN117874393B (zh) * | 2024-03-12 | 2024-05-14 | 成都谐盈科技有限公司 | 通过xml文件构建sca模型工程的方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159928A (zh) * | 2015-08-05 | 2015-12-16 | 深圳联友科技有限公司 | 一种json数据转换成模型数据的方法及系统 |
CN106843878A (zh) * | 2017-01-20 | 2017-06-13 | 武汉斗鱼网络科技有限公司 | 一种模型生成方法和系统 |
WO2018090508A1 (zh) * | 2016-11-15 | 2018-05-24 | 平安科技(深圳)有限公司 | 一种基于Keychain的数据管理方法、终端、设备及计算机可读存储介质 |
CN108196844A (zh) * | 2018-01-04 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | 信息处理方法、装置、电子设备及存储介质 |
-
2019
- 2019-01-14 CN CN201910032028.6A patent/CN109857389B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159928A (zh) * | 2015-08-05 | 2015-12-16 | 深圳联友科技有限公司 | 一种json数据转换成模型数据的方法及系统 |
WO2018090508A1 (zh) * | 2016-11-15 | 2018-05-24 | 平安科技(深圳)有限公司 | 一种基于Keychain的数据管理方法、终端、设备及计算机可读存储介质 |
CN106843878A (zh) * | 2017-01-20 | 2017-06-13 | 武汉斗鱼网络科技有限公司 | 一种模型生成方法和系统 |
CN108196844A (zh) * | 2018-01-04 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | 信息处理方法、装置、电子设备及存储介质 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881059A (zh) * | 2020-08-10 | 2020-11-03 | 网易(杭州)网络有限公司 | 代码文件的检测方法、装置和电子设备 |
CN111881059B (zh) * | 2020-08-10 | 2023-10-27 | 网易(杭州)网络有限公司 | 代码文件的检测方法、装置和电子设备 |
CN112328231A (zh) * | 2020-10-14 | 2021-02-05 | 远江盛邦(北京)网络安全科技股份有限公司 | python字典和结构体间的快速转换方法 |
CN112328231B (zh) * | 2020-10-14 | 2024-02-23 | 远江盛邦(北京)网络安全科技股份有限公司 | python字典和结构体间的快速转换方法 |
CN112836475A (zh) * | 2020-11-24 | 2021-05-25 | 辽宁振兴银行股份有限公司 | 一种混合json和xml数据转为二维数组的方法 |
CN113098966A (zh) * | 2021-04-01 | 2021-07-09 | 广东三维家信息科技有限公司 | 基于跨标签页的模型复制方法、装置、终端设备及存储介质 |
CN117874393A (zh) * | 2024-03-12 | 2024-04-12 | 成都谐盈科技有限公司 | 通过xml文件构建sca模型工程的方法和系统 |
CN117874393B (zh) * | 2024-03-12 | 2024-05-14 | 成都谐盈科技有限公司 | 通过xml文件构建sca模型工程的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109857389B (zh) | 2022-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857389A (zh) | 模型数据生成方法、装置、计算机设备及存储介质 | |
US9613115B2 (en) | Generating programs based on input-output examples using converter modules | |
CN100464294C (zh) | 对命令的输入参数执行基于反射的处理的方法和系统 | |
JP5087261B2 (ja) | データ要素命名システムおよび方法 | |
US10127023B2 (en) | Computer-aided development of native mobile application code | |
CN107357593A (zh) | 源代码文件组建方法、装置、电子终端及可读存储介质 | |
CN112560100B (zh) | 数据脱敏方法及装置、计算机可读存储介质、电子设备 | |
CN106844380A (zh) | 一种数据库操作方法、信息处理方法和相应装置 | |
CN110377892A (zh) | 一种政务智能表单模板设计系统 | |
CN109146095A (zh) | 多业务系统问题的处理方法和装置 | |
CN110543303A (zh) | 一种可视化业务平台 | |
CN106843878A (zh) | 一种模型生成方法和系统 | |
CN114090671A (zh) | 数据导入方法、装置、电子设备及存储介质 | |
Fisher et al. | The next 700 data description languages | |
CN109828759B (zh) | 代码编译方法、装置、计算机装置及存储介质 | |
CN109933331A (zh) | 一种客户端服务器间数据转换方法及相关组件 | |
CN111125996B (zh) | 一种伪随机激励生成器的基于双向约束树指令集实现方法 | |
Bowen | Formal specification in Z as a design and documentation tool | |
CN108959952B (zh) | 数据平台权限控制方法、装置和设备 | |
CN115809294A (zh) | 一种基于Spark SQL临时视图的快速ETL方法 | |
Miao et al. | Research on user interface transformation method based on MDA | |
CN114186958A (zh) | 将列表数据导出为电子表格的方法、计算设备及存储介质 | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
CN112925523A (zh) | 对象比较方法、装置、设备及计算机可读介质 | |
CN110532526A (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 |