CN111045685A - 代码转换方法、装置、存储介质及电子设备 - Google Patents
代码转换方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111045685A CN111045685A CN201911070221.5A CN201911070221A CN111045685A CN 111045685 A CN111045685 A CN 111045685A CN 201911070221 A CN201911070221 A CN 201911070221A CN 111045685 A CN111045685 A CN 111045685A
- Authority
- CN
- China
- Prior art keywords
- array
- code
- class
- javascript
- generating
- 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
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/51—Source to source
Abstract
本申请公开了一种代码转换方法、装置、存储介质及电子设备,涉及代码转换技术。具体方案包括:获取本地的JSON字符串,将获取的所述JSON字符串转换为至少一个JavaScript对象;获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的元素为一个JavaScript对象;根据所述对象数组集,生成目标代码。本申请可以提升类模型的创建工作的效率,从而节省iOS代码编写所需的人力与时间成本,整体提升iOS代码的编写效率。
Description
技术领域
本申请涉及代码转换技术,特别是涉及一种代码转换方法、装置、存储介质及电子设备。
背景技术
代码开发尤其是iOS代码的开发,需要调试非常多的接口,随着业务日益复杂,代码数据结构也日趋复杂,iOS代码的类的声明代码越来越多,嵌套关系也非常复杂。
现有的iOS代码一般是手动编写的,编写时类模型的创建工作即会带来大量时间消耗,使得iOS代码的编写耗时耗力。
发明内容
有鉴于此,本申请的主要目的在于提供一种代码转换方法,该方法可以提升类模型的创建工作的效率,从而节省iOS代码编写所需的人力与时间成本,整体提升iOS代码的编写效率。
为了达到上述目的,本申请提出的技术方案为:
第一方面,本申请实施例提供了一种代码转换方法,包括以下步骤:
获取本地的JSON字符串,将获取的所述JSON字符串转换为至少一个JavaScript对象;
获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的每个元素为一个所述JavaScript对象;
根据所述对象数组集,生成目标代码。
一种可能的实施方式中,所述获取本地的JSON字符串的步骤为:
使用浏览器获取本地的JSON字符串。
一种可能的实施方式中,所述获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集的步骤,包括:
针对每个所述JavaScript对象,确定该JavaScript对象的对象类型;
当该JavaScript对象为类对象时,将所述类对象加入当前嵌套层级的对象数组,并针对所述类对象创建子嵌套层级的对象数组;
当该JavaScript对象为基础对象时,将所述基础对象加入当前嵌套层级的对象数组。
一种可能的实施方式中,所述根据所述数据结构关系和所述对象类型生成对象数组集的步骤之后,所述根据所述对象数组集,生成目标代码的步骤之前,所述方法还包括:
基于所述对象数组的数据结构关系,将所述对象数组集中的每个所述对象数组逆序排列。
一种可能的实施方式中,所述根据所述对象数组集,生成目标代码的步骤,包括:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
针对该对象数组中的每个元素,根据该元素对应的JavaScript对象的对象名称和数据类型,生成变量声明代码;
该对象数组中的每个元素的变量声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,所述根据所述对象数组集,生成目标代码的步骤,包括:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
该对象数组的类名声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,所述将获取的所述JSON字符串转换为至少一个JavaScript对象的步骤包括:
根据所述JSON字符串的键确定所述JavaScript对象的对象名称。
一种可能的实施方式中,所述获取本地的JSON字符串的步骤之前,所述方法还包括:
使用所述浏览器获取代码名称;
所述根据所述对象数组集,生成目标代码的步骤,包括:
根据所述代码名称,生成顶层的对象数组的类名声明代码。
第二方面,基于相同的设计构思,本申请实施例提供了一种代码转换装置,包括:
获取模块,用于获取本地的JSON字符串;
对象转换模块,用于将获取的所述JSON字符串转换为至少一个JavaScript对象;
数组生成模块,用于获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的元素为一个JavaScript对象;
代码生成模块,用于根据所述对象数组集,生成目标代码。
一种可能的实施方式中,所述获取模块,还用于:
使用浏览器获取本地的JSON字符串。
一种可能的实施方式中,所述数组生成模块,具体包括:
类型确定单元,用于针对每个所述JavaScript对象,确定该JavaScript对象的对象类型;
数组建立单元,用于当该JavaScript对象为类对象时,将所述类对象加入当前嵌套层级的对象数组,并针对所述类对象创建子嵌套层级的对象数组;
所述数组建立单元,还用于当该JavaScript对象为基础对象时,将所述基础对象加入当前嵌套层级的对象数组。
一种可能的实施方式中,所述代码转换装置,还包括:
数组排序模块,用于基于所述对象数组的数据结构关系,将所述对象数组集中的每个所述对象数组逆序排列。
一种可能的实施方式中,所述代码生成模块,还用于:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
并针对该对象数组中的每个元素,根据该元素对应的JavaScript对象的对象名称和数据类型,生成变量声明代码;
该对象数组中的每个元素的变量声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,所述代码生成模块,还用于:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
该对象数组的类名声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,所述对象转换模块,还用于:
根据所述JSON字符串的键确定所述JavaScript对象的对象名称。
一种可能的实施方式中,所述获取模块,还用于:
使用所述浏览器获取代码名称;
所述代码生成模块,还用于:
根据所述代码名称,生成顶层的对象数组的类名声明代码。
第三方面,本申请实施例还提供一种计算机可读存储介质,可以提升iOS代码的编写效率。具体方案为:
一种计算机可读存储介质,存储有计算机指令,所述指令被处理器执行时可实现上述第一方面及第一方面中任一种可能的实施方式的步骤。
第四方面,本申请实施例还提供一种电子设备,可以提升iOS代码的编写效率。具体方案为:
一种电子设备,该电子设备包括上述的计算机可读存储介质,还包括可执行所述计算机可读存储介质的处理器。
综上所述,本申请提出的一种代码转换方法、装置、存储介质及电子设备。本申请使用轻量级且架构清晰的JavaScript对象简谱(JavaScript Object Notation,JSON)为程序语言,开发可以实现目标代码功能的JSON字符串。通过轻量级的、便于使用及更新的浏览器作为工具,获取JSON字符串,并基于JSON字符串转换为目标代码。比起直接编写iOS代码,JSON字符串的语法结构简洁,大大降低了类模型创建工作的工作量。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种代码转换方法的流程示意图;
图2为本申请实施例提供的另一种代码转换方法的流程示意图;
图3为一种树形结构的JavaScript对象集合示例;
图4为一种对象数组集示例;
图5为本申请实施例提供的一种代码转换装置的结构示意图;
图6为本申请实施例提供的代码转换装置中数组生成模块的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例,例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
本申请实施例应用于需要对iOS代码中的类对象进行声明的类模型创建的应用场景,本申请实施例可以应用于转换生成任一种iOS代码,例如,转换生成Objective-C程序语言编写的iOS代码。
本申请的核心发明点在于,使用轻量级且架构清晰的JSON为程序语言,开发可以实现目标代码功能的JSON字符串。通过轻量级的、便于使用及更新的浏览器作为工具,获取JSON字符串,并基于JSON字符串转换为目标代码。
进一步的,由于代码结构的不同,为了实现基于JSON字符串转换为目标代码这一技术方案,本申请使用对象数组集对每个JavaScript对象进行临时存储,对象数组集中的每个对象数组对应了一个类对象,从而完成了JSON字符串的类对象间嵌套的数据结构到目标代码的类对象间并列的数据结构之间的转换。优选的,基于对象数组的数据结构关系,将对象数组集中的每个对象数组逆序排列,使iOS代码中下一层的类对象在上一层的类对象声明之前进行声明,从而避免了重复声明类对象之间的依赖关系,简化了目标代码的代码结构。本申请提升了类模型的创建工作的效率,节省iOS代码编写所需的人力与时间成本,整体提升了iOS代码的编写效率。
为使本申请的目的、技术方案和优点更加清楚,下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
实施例一
图1为本申请实施例提供的一种代码转换方法的流程示意图,如图1所示,该实施例主要包括:
S101:获取本地的JSON字符串,将获取的所述JSON字符串转换为至少一个JavaScript对象。
JSON程序语言的程序代码通常采用字符串的格式进行编写和存储,本申请实施例获取用于实现JSON程序语言的程序代码的JSON字符串。
获取JSON字符串后,将JSON字符串转换为至少一个JavaScript对象。进一步的,生成的JavaScript对象可以包括类对象和基础对象两种对象类型,其中,类对象为包含了子级JavaScript对象的JavaScript对象,基础对象为不包含子级JavaScript对象的JavaScript对象。类对象可以声明为iOS代码中的一个类,基础对象仅能声明为iOS代码中的一个变量。具体的,一个类对象通常包括了至少一个子级JavaScript对象,每个子级JavaScript对象可以为基础对象也可以为类对象。
S102:获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组中的每个元素为一个所述JavaScript对象。
转换得到至少一个JavaScript对象之后,为了方便JavaScript对象的存储和方便根据存储的JavaScript对象生成目标代码,本申请实施例使用对象数组集进行JavaScript对象的存储,对象数组集为对象数组的集合,对象数组集中包括了至少一个对象数组,对象数组中的一个元素为一个JavaScript对象。由于一个类对象通常包括了至少一个子级JavaScript对象,本申请实施例使用一个对象数组对应一个类对象,该对象数组的每个元素存储的JavaScript对象对应该类对象包括的每个子级JavaScript对象。这里,类对象包括的子级JavaScript对象也是根据JSON字符串转换得到的JavaScript对象,只是基于JSON字符串的嵌套层级关系,子级JavaScript对象为该类对象的子级对象,类对象包括的子级JavaScript对象可以为类对象也可以为基础对象,因此,对象数组中的元素可以为类对象也可以为基础对象。
S103:根据所述对象数组集,生成目标代码。
依次根据排列后的对象数组集中的每个对象数组,生成目标代码,可以保证下一层的类对象声明位于上一层的类对象之前。并且根据每个对象数组声明一个类对象,可以实现将目标代码中的类对象并列声明,符合了目标代码的代码结构。由于JSON代码的代码量小,语法结构简洁,代码架构清晰,因此,本申请实施例大大降低了类模型创建工作的工作量,节省iOS代码编写所需的人力与时间成本,整体提升了iOS代码的编写效率。
实施例二
如图2所示,本申请实施例二提供了另一种代码转换方法,具体包括:
S201:使用浏览器获取本地的JSON字符串。
本申请实施例使用浏览器获取本地的JSON字符串,并使用浏览器实现获取JSON字符串并将JSON字符串转换为目标代码的过程,浏览器实现简洁,用户操作浏览器快速便捷。且如果修改技术方案实现的方法时、或者对浏览器上的错误进行修正时,用户打开修改后的浏览器或刷新浏览器即可方便地使用修改后的浏览器实现代码转化。
在使用浏览器获取JSON字符串之前,还可以使用所述浏览器获取代码名称。这里代码名称为目标代码顶层类的名称。一种可能的实施方式中,使用浏览器获取代码名称,通常会在浏览器上提供一个文本框,使用户可以通过文本框自定义代码名称。
之后,可以使用浏览器获取存储于本地的JSON字符串的存储地址,并根据存储地址获取JSON字符串。
S202:将获取的所述JSON字符串转换为至少一个JavaScript对象。
获取JSON字符串后,将获取到的JSON字符串转换为JavaScript对象。具体的,依次读取每句JSON字符串,根据JSON程序语言的语法结构进行解析,JSON字符串由键(key)和值(value)组成,其中,根据JSON字符串的键确定每个JavaScript对象的对象名称,根据JSON字符串的值确定每个JavaScript对象的具体值。
示例性的,一段JSON字符串如下:
依次对每句JSON字符串进行转换,例如对第一句JSON字符串"string1":"s1",其键为"string1",则确定的JavaScript对象的对象名称为string1,值为"s1",则确定的JavaScript对象的具体值为s1,也就是说,确定的JavaScript对象的具体内容为"s1"这一包含两个字符的字符串,此时,确定得到的JavaScript对象不包含子级JavaScript对象,因此确定得到的JavaScript对象为基础对象。再例如,对第二句JSON字符串"object1":{"string2":"s2","string3":"s3"}进行转换,其键为"object1",则确定得到的JavaScript对象的对象名称为object1,其值为{"string2":"s2","string3":"s3"},由于该值包含大括号,也就是说确定的JavaScript对象包含子级JavaScript对象,因此确定的JavaScript对象为对象名object1的类对象,该类对象的作用区域为大括号的范围,也就是{"string2":"s2","string3":"s3"}。可继续对该类对象包含的子级JavaScript对象进行转换,得到两个基础对象,分别是名称为"string2"、具体值为"s2"的JavaScript对象,以及名称为"string3"、具体值为"s3"的JavaScript对象。在具体实施时,可以直接使用JSON.parse方法进行JSON字符串的转换,得到JavaScript对象。依次对示例中的每句JSON字符串进行转换,可以得到如图3所示的树形结构的JavaScript对象集合。实际得到的树形结构的JavaScript对象集合可以包含一层叶节点,也可以包含多层叶节点。每个叶节点可以是类对象,也可以是基础对象:当叶节点包含子级叶节点时,该叶节点为类对象;当叶节点不包含子级叶节点时,该叶节点为基础对象。
S203:针对每个所述JavaScript对象,确定该JavaScript对象的对象类型。
在生成对象数组集时,需要针对类对象和基础对象进行不同的操作,因此,需要首先确定每个JavaScript对象的对象类型,包含子级JavaScript对象的为类对象,不包含子级JavaScript对象的为基础对象。之后,针对每个JavaScript对象,根据该JavaScript对象的对象类型进行判断。如果该JavaScript对象的对象类型为基础对象,执行步骤S204;如果该JavaScript对象的对象类型为类对象,执行步骤S205。
S204:当该JavaScript对象为基础对象时,将所述基础对象加入当前嵌套层级的对象数组。
对于基础对象,没有包含子级JavaScript对象,因此直接将该基础对象加入当前嵌套层级的对象数组。具体的,由于该基础对象可能为某个类对象的子级JavaScript对象,需要将该基础对象加入该基础对象的父级类对象对应的对象数组。另外,当该基础对象的父级对象不是类对象,而是顶层类,则将该基础对象加入顶层的对象数组中。因此,当前嵌套层级的对象数组为该基础对象的父级类对象对应的对象数组、或者顶层的对象数组。如图3所示的JavaScript对象的属性结构中,string2这一JavaScript对象为基础对象,应当直接加入对象数组,并且应该加入当前嵌套层级的对象数组,也就是string2的父级类对象object1对应的对象数组。
S205:当该JavaScript对象为类对象时,将所述类对象加入当前嵌套层级的对象数组,并针对所述类对象创建子嵌套层级的对象数组。
当判定该JavaScript对象为类对象时,仍然需要将该类对象加入当前嵌套层级的对象数组,也就是将该类对象加入该类对象的父级类对象对应的对象数组、或者顶层的对象数组。如图3所示的JavaScript对象的属性结构中,object3这一JavaScript对象为类对象,应该加入当前嵌套层级的对象数组,也就是object3的父级类对象object2对应的对象数组。
将类对象加入当前嵌套层级的对象数组后,由于该类对象还包含有子级JavaScript对象,因此为该类对象创建该类对象对应的对象数组,该类对象对应的对象数组为当前嵌套层级的子嵌套层级的对象数组。
对该类对象包含的每个子级JavaScript对象,执行确定并评断该JavaScript对象的对象类型相同的步骤。获取该JavaScript对象包含的每个子级JavaScript对象,并确定每个子级JavaScript对象的对象类型。并对确定的每个子级JavaScript对象的对象类型进行判断。
每当判定该子级JavaScript对象的对象类型为基础对象时,将该子级基础对象加入上述子嵌套层级的对象数组。
每当判定该子级JavaScript对象的对象类型为类对象时,将该子级类对象加入子嵌套层级的对象数组,执行为该子级类对象创建下一级子嵌套层级的对象数组的步骤,直至遍历每个所述JavaScript对象。
上述判断子级JavaScript对象的对象类型并执行相应步骤的方法,与判断父级JavaScript对象的对象类型并执行相应步骤的方法相同。子级JavaScript对象加入的上述子嵌套层级的对象数组,也就是该子级JavaScript对象的父级JavaScript对象对应的对象数组。
示例性的,对图3所示的树状结构的JavaScript对象经过上述步骤S203至步骤S205的处理,可以得到如图4所示的对象数组集。该树状结构和对象数组集仅为一个示例,根据具体的JSON字符串,JavaScript对象的树状结构和生成对象数组集可以无限扩展。
S206:基于所述对象数组的数据结构关系,将所述对象数组集中的每个所述对象数组逆序排列。
由于每个类对象对应了一个对象数组,且基于JSON字符串的数据结构关系,也就是JSON程序语言语法结构中的嵌套层级关系,转换得到的JavaScript对象也具有嵌套层级,且JavaScript对象的嵌套层级可以根据被转换的JSON字符串的嵌套层级关系得到。由于在iOS代码中,最好将下一层的类对象声明在上一层的类对象之前,这样可以避免重复声明类对象之间的依赖关系,简化目标代码的代码结构。而在将JSON字符串转换为JavaScript对象时,由于JSON程序语言的语法结构,上一层的类对象会先于下一层的类对象被转换,在根据JavaScript对象生成对象数组集时,自然地上一层类对象对应的对象数组会位于下一层类对象对应的对象数组之前,因此,将对象数组集中的每个所述对象数组逆序排列,可以使下一层的类对象声明位于上一层的类对象之前。
这里,存在一种特殊情况,就是JSON字符串中只有一个类对象,此时对象数组集中只存在一个对象数组,此时将对象数组集中的每个所述对象数组逆序排列对对象数组集中对象数组集中的一个对象数组实际不会产生影响。或者将逆序排列的步骤省略也可。
由于根据树状结构的JavaScript对象生成对象数组集时,自然地上一层的对象数组会排在下一层的对象数组之前,在如图3示例的树状结构的JavaScript对象生成的对象数组集中,依次为顶层的对象数组、类对象object1对应的对象数组、类对象object2对应的对象数组、类对象object3对应的对象数组和object4对应的对象数组。因此,为了实现下一层对象数组对应的类对象先于上一层对象数组对应的类对象进行类对象的声明,根据所述类对象的所述JavaScript对象的嵌套层级,将对象数组集中的每个所述对象数组逆序排列。在如图3示例的树状结构的JavaScript对象生成的对象数组集中,对每个对象数组进行逆序排列后,得到的对象数组集中的对象数组顺序为:object4对应的对象数组、object3对应的对象数组、object2对应的对象数组、object1对应的对象数组和顶层的对象数组。依照对象数组集中的对象数组顺序依次进行类对象的声明,即可实现下一层对象数组对应的类对象先于上一层对象数组对应的类对象进行类对象的声明,从而解决类对象声明之间的依赖关系问题。
S207:根据所述对象数组集,生成目标代码。
目标代码的不同,生成方式不同,因此根据生成的目标代码的不同,可以采用下述两种可能的实施方式生成目标代码。
A:一种可能的实施方式中,可以采用下述步骤1至步骤3生成目标代码:
步骤1、基于对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
无论是否将对象数组集中的每个对象数组进行逆序排列,对象数组集中的对象数组都基于对象数组的数据结构关系排列:当将对象数组集中的每个对象数组进行逆序排列时,对象数组集中的对象数组基于对象数组的数据结构关系自底层至顶层排列;当未将对象数组集中的每个对象数组进行逆序排列时,对象数组集中的对象数组基于对象数组的数据结构关系自顶层至底层排列。依次针对对象数组集中的每个对象数组,生成目标代码。包括生成类名声明代码、变量声明代码和类结束代码。
步骤2、并针对该对象数组中的每个元素,根据该元素对应的JavaScript对象的对象名称和数据类型,生成变量声明代码;
步骤3、该对象数组中的每个元素的变量声明代码生成完毕后,生成该对象数组的类结束代码。
具体例如,生成以Objective-C程序语言的iOS代码时,iOS代码中的.h文件代码可以采用上述可能的实施方式A生成。.h文件中,一个类对象对应一段类声明代码,类声明代码依次由类名声明代码、变量声明代码和类结束代码组成。因此,先根据该对象数组对应的类对象的对象名称生成类名声明代码,这里,JavaScript对象的对象名称根据所述JSON字符串的键确定。之后针对该对象数组的每个元素生成变量声明代码,当每个元素的变量声明代码均生成完毕后,生成类结束代码。对对象数组集中的每个对象数组均进行上述步骤1至步骤3的操作。
以如图3示例的树状结构的JavaScript对象生成的如图4所示的对象数组集为依据,生成以Objective-C程序语言的iOS代码时,生成的.h文件的具体代码内容如下:
@interface object4:NSObject
@property(nonatomic,copy)NSInteger*int2;
@property(nonatomic,strong)NSString*string5;
@end
@interface object3:NSObject
@property(nonatomic,copy)NSInteger*int1;
@property(nonatomic,strong)NSString*string4;
@end
@interface object2:NSObject
@property(nonatomic,copy)object3*model;
@property(nonatomic,copy)object4*model;
@end
@interface object1:NSObject
@property(nonatomic,strong)NSString*string2;
@property(nonatomic,strong)NSString*string3;
@end
@interface根节点类对象:NSObject
@property(nonatomic,strong)NSString*string1;
@property(nonatomic,copy)object1*model;
@property(nonatomic,copy)object2*model;
@end
上述示例中,每个类对象对应的类声明代码中的第一句,例如“@interfaceobject1:NSObject”为类名声明代码,根据该对象数组对应的类对象的对象名称生成,可以根据具体程序语言的语法生成类名声明代码的模板,例如根据Objective-C程序语言的语法生成类名声明代码的模板,并将该对象数组对应的类对象的对象名称插入上述类名声明代码的模板中的类名称位置,得到类名声明代码。
每个类对象对应的类声明代码中的最后一句,例如“@end”为类结束代码,类结束代码用于表示一个类对象声明的结束,用于区隔每个类对象的类声明代码,根据具体程序语言的语法,类结束代码通常为固定的字符串。
每个类对象对应的类声明代码中的其余句代码,为变量声明代码,根据该对象数组中每个元素对应的JavaScript对象的对象名称和数据类型。具体生成方式类似类名声明代码,可以根据具体程序语言的语法生成变量声明代码的模板,并将该元素对应的JavaScript对象的对象名称和数据类型插入上述变量声明代码的模板中的对象名称位置和数据类型位置,得到变量声明代码。变量声明代码除了包括对象名称,还包括JavaScript对象的数据类型,基础对象的数据类型包括:字符串类型(string)、整型(int)、以及浮点型(float)等,类对象的数据类型为对象类型(object)。
B:另一种可能的实施方式中,可以根据下述步骤I和步骤II生成目标代码:
步骤I、基于对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
步骤II、所述类名声明代码生成完毕后,生成类结束代码。
具体例如,生成以Objective-C程序语言的iOS代码时,iOS代码中的.m文件代码可以采用上述可能的实施方式B生成。.m文件中,一个类对象也对应一段类声明代码,类声明代码依次由类名声明代码、属性声明代码和类结束代码组成。然而属性声明代码不具有复用性,每个类声明代码的属性声明代码仅能由开发者手动填写,因此,本申请实施例生成的.m文件中,仅根据对象数组集依次生成类名声明代码和类结束代码。类名生成代码和类结束代码的具体生成方式与可能的实施方式A中的生成方式相同。
对于类名生成代码,根据具体程序语言的语法生成类名声明代码的模板,例如根据Objective-C程序语言的语法生成类名声明代码的模板,并将该对象数组对应的类对象的对象名称插入上述类名声明代码的模板中的类名称位置,得到类名声明代码。
对于类结束代码,根据具体程序语言的语法,类结束代码通常为固定的字符串。
除了上述类声明代码之外,一个完整的代码通常还包括头部代码。与类结束代码类似,头部代码通常也根据具体程序语言的语法,为固定的字符串。例如对于iOS代码中的.h文件,头部代码通常为下述字符串:
#import<UIKit/UIKit.h>
因此,只需在根据对象数组集生成类声明代码之前,将头部代码的字符串写入代码文件即可。
排列后的对象数组集,其中顶层的对象数组为根节点的JavaScript对象,如图3所示,根据JSON程序语言的语法,根节点的JavaScript对象通常未命名,此时,可以使用浏览器获取代码名称,并根据代码名称生成根节点的JavaScript对象的对象名称,也就是根据代码名称生成顶层的对象数组的类名声明代码。示例性的,可以直接将代码名称作为顶层的对象数组的类名,生成类名声明代码,得到的顶层的对象数组的类声明代码如下:
@interface代码名称:NSObject
@property(nonatomic,strong)NSString*string1;
@property(nonatomic,copy)object1*model;
@property(nonatomic,copy)object2*model;
@end
头部代码和每个对象数组的类声明代码,构成了目标代码。
在生成目标代码后,将目标代码拖到iOS工程中即可使用。
使用浏览器完成JSON字符串的获取和转换操作时,可以将转换得到的目标代码生成为Blob对象,并使用超链接将目标代码下载到开发者的本地设备。
基于相同的设计构思,本申请实施例还提供一种代码转换装置、存储介质及电子设备。
实施例三
如图5所示,本申请实施例还提供一种代码转换装置500,包括:
获取模块501,用于获取本地的JSON字符串;
对象转换模块502,用于将获取的所述JSON字符串转换为至少一个JavaScript对象;
数组生成模块503,用于获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的元素为一个JavaScript对象;
代码生成模块504,用于根据所述对象数组集,生成目标代码。
一种可能的实施方式中,获取模块501,还用于:
使用浏览器获取本地的JSON字符串。
一种可能的实施方式中,如图6所示,所述数组生成模块503,具体包括:
类型确定单元601,用于针对每个所述JavaScript对象,确定该JavaScript对象的对象类型;
数组建立单元602,用于当该JavaScript对象为类对象时,将所述类对象加入当前嵌套层级的对象数组,并针对所述类对象创建子嵌套层级的对象数组;
所述数组建立单元602,还用于当该JavaScript对象为基础对象时,将所述基础对象加入当前嵌套层级的对象数组。
一种可能的实施方式中,所述代码转换装置500,还用于:
数组排序模块505,用于基于所述对象数组的数据结构关系,将所述对象数组集中的每个所述对象数组逆序排列。
一种可能的实施方式中,所述代码生成模块504,还用于:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
并针对该对象数组中的每个元素,根据该元素对应的JavaScript对象的对象名称和数据类型,生成变量声明代码;
该对象数组中的每个元素的变量声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,所述代码生成模块504,还用于:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
该对象数组的类名声明代码生成完毕后,生成该对象数组的类结束代码。
一种可能的实施方式中,对象转换模块502,还用于:
根据所述JSON字符串的键确定所述JavaScript对象的对象名称。
一种可能的实施方式中,所述获取模块501,还用于:
使用所述浏览器获取代码名称;
所述代码生成模块504,还用于:
根据所述代码名称,生成顶层的对象数组的类名声明代码。
在具体实施时,获取模块501使用浏览器实现,使用浏览器获取到本地的JSON字符串,将JSON字符串发送给对象转换模块502,并由对象转换模块502将JSON字符串转换为至少一个JavaScript对象。转换得到的每个JavaScript对象由对象转换模块502发送给数组生成模块503,由数组生成模块503生成对象数组集,并将对象数组集发送给代码生成模块504,得到目标代码。在一种可能的实施方式中,代码转换装置500的数组生成模块503和代码生成模块504之间还包括数组排序模块505,用于将对象数组集中的每个对象数组逆序排列。
本申请实施例提供的代码转换装置可以提升类模型的创建工作的效率,从而节省iOS代码编写所需的人力与时间成本,整体提升iOS代码的编写效率。
实施例四
一种计算机可读介质,所述计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行本申请实施例提供的任一种代码转换方法的步骤。实际应用中,所述的计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的,也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或多个程序被执行时,实现根据参考本申请实施例提供的任一种代码转换装置进行本申请实施例提供的任一种代码转换方法的步骤。
根据本申请公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合,但不用于限制本申请保护的范围。在本申请公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本申请所述的方法步骤除了可以用数据处理程序来实现,还可以由硬件来实现,例如,可以由逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器和嵌微控制器等来实现。因此这种可以实现本申请所述方法的硬件也可以构成本申请。
实施例五
本申请实施例还提供一种电子设备,可以是计算机或服务器,其中可以集成本申请实施例提供的任一种代码转换装置。如图7所示,其示出了本申请实施例提供的电子设备700。
该电子设备可以包括一个或者一个以上处理核心的处理器701、一个或一个以上计算机可读存储介质702。该电子设备还可以包括电源703、输入输出单元704。本领域技术人员可以理解,图7中并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中:
处理器701是该电子设备的控制部分,利用各种接口和线路连接各个部分,通过运行或执行存储在计算机可读存储介质702中的软件程序,执行本申请实施例提供的任一种代码转换方法的步骤。
计算机可读存储介质702可用于存储软件程序,即本申请实施例提供的任一种代码转换方法中涉及的程序。
处理器701通过运行存储在计算机可读存储介质702的软件程序,从而执行各种功能应用以及数据处理。计算机可读存储介质702可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据电子设备需要使用的数据等。此外,计算机可读存储介质702可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,计算机可读存储介质702还可以包括存储器控制器,以提供处理器701对计算机可读存储介质702的访问。
电子设备还包括给各个部件供电的电源703,优选的,电源703可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源703还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该服务器还可包括输入输出单元704,比如可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入;比如可用于显示由用户输入的信息或提供给用户的信息以及服务器的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。
本申请的每个实施例均基于相同的设计构思,且本申请任一个方法实施例中的技术手段可以进行自由组合,组合得到的技术手段仍在本申请的保护范围之内。
本申请附图中的流程图和框图,示出了按照本申请公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标准的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本申请中。特别地,在不脱离本申请精神和教导的情况下,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本申请公开的范围。
本申请中应用了具体实施例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思路,并不用于限制本申请。对于本领域的技术人员来说,可以依据本申请的思路、精神和原则,在具体实施方式及应用范围上进行改变,其所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种代码转换方法,其特征在于,包括:
获取本地的JSON字符串,将获取的所述JSON字符串转换为至少一个JavaScript对象;
获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的元素为一个JavaScript对象;
根据所述对象数组集,生成目标代码。
2.根据权利要求1所述的方法,其特征在于,所述获取本地的JSON字符串的步骤为:
使用浏览器获取本地的JSON字符串。
3.根据权利要求1所述的方法,其特征在于,所述获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集的步骤,包括:
针对每个所述JavaScript对象,确定该JavaScript对象的对象类型;
当该JavaScript对象为类对象时,将所述类对象加入当前嵌套层级的对象数组,并针对所述类对象创建子嵌套层级的对象数组;
当该JavaScript对象为基础对象时,将所述基础对象加入当前嵌套层级的对象数组。
4.根据权利要求1所述的方法,其特征在于,所述根据所述数据结构关系和所述对象类型生成对象数组集的步骤之后,所述根据所述对象数组集,生成目标代码的步骤之前,所述方法还包括:
基于所述对象数组的数据结构关系,将所述对象数组集中的每个所述对象数组逆序排列。
5.根据权利要求1所述的方法,其特征在于,所述根据所述对象数组集,生成目标代码的步骤,包括:
基于所述对象数组的数据结构关系,依次针对每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
针对该对象数组中的每个元素,根据该元素对应的JavaScript对象的对象名称和数据类型,生成变量声明代码;
该对象数组中的每个元素的变量声明代码生成完毕后,生成该对象数组的类结束代码。
6.根据权利要求1所述的方法,其特征在于,所述根据所述对象数组集,生成目标代码的步骤,包括:
基于所述对象数组的数据结构关系,依次针对所述对象数组集中的每个对象数组,根据该对象数组对应的类对象的对象名称,生成类名声明代码;
该对象数组的类名声明代码生成完毕后,生成该对象数组的类结束代码。
7.根据权利要求5或6所述的方法,其特征在于,所述将获取的所述JSON字符串转换为至少一个JavaScript对象的步骤包括:
根据所述JSON字符串的键确定所述JavaScript对象的对象名称。
8.一种代码转换装置,其特征在于,包括:
获取模块,用于获取本地的JSON字符串;
对象转换模块,用于将获取的所述JSON字符串转换为至少一个JavaScript对象;
数组生成模块,用于获取每个所述JavaScript对象之间的数据结构关系和对象类型,根据所述数据结构关系和所述对象类型生成对象数组集;所述对象数组集中包括至少一个对象数组;所述对象数组中的元素为一个JavaScript对象;
代码生成模块,用于根据所述对象数组集,生成目标代码。
9.一种计算机可读存储介质,存储有计算机指令,其特征在于,所述指令被处理器执行时可实现权利要求1~7任一项所述的方法的步骤。
10.一种电子设备,其特征在于,该电子设备包括如权利要求9所述的计算机可读存储介质,还包括可执行所述计算机可读存储介质的处理器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911070221.5A CN111045685A (zh) | 2019-11-05 | 2019-11-05 | 代码转换方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911070221.5A CN111045685A (zh) | 2019-11-05 | 2019-11-05 | 代码转换方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111045685A true CN111045685A (zh) | 2020-04-21 |
Family
ID=70231890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911070221.5A Pending CN111045685A (zh) | 2019-11-05 | 2019-11-05 | 代码转换方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111045685A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176897A (zh) * | 2021-04-29 | 2021-07-27 | 北京字跳网络技术有限公司 | 一种信息处理方法、装置、终端设备及存储介质 |
CN113253940A (zh) * | 2021-06-17 | 2021-08-13 | 北京壁仞科技开发有限公司 | 内存数据转储及构建方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102768643A (zh) * | 2012-06-27 | 2012-11-07 | 河海大学常州校区 | 一种使用多函数契约测试JavaScript函数正确性的方法 |
CN103077185A (zh) * | 2012-12-18 | 2013-05-01 | 厦门雅迅网络股份有限公司 | 一种基于对象的自定义扩展信息的方法 |
CN105069116A (zh) * | 2015-08-11 | 2015-11-18 | 北京思特奇信息技术股份有限公司 | 一种将json串转化为数组的方法及系统 |
CN105159928A (zh) * | 2015-08-05 | 2015-12-16 | 深圳联友科技有限公司 | 一种json数据转换成模型数据的方法及系统 |
CN105786529A (zh) * | 2016-04-22 | 2016-07-20 | 浙江工业大学 | 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 |
US9424003B1 (en) * | 2014-10-24 | 2016-08-23 | Emc Corporation | Schema-less system output object parser and code generator |
CN106796526A (zh) * | 2014-10-31 | 2017-05-31 | 甲骨文国际公司 | Json样式表语言变换 |
CN107015839A (zh) * | 2016-09-27 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 一种实现前端事件代理的方法及装置 |
CN108628737A (zh) * | 2017-03-23 | 2018-10-09 | 北京小唱科技有限公司 | 一种json数据的验证方法和系统 |
CN109032662A (zh) * | 2018-06-19 | 2018-12-18 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 代码文件生成方法、装置、计算机设备和存储介质 |
CN109062560A (zh) * | 2018-07-25 | 2018-12-21 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN109408569A (zh) * | 2018-09-28 | 2019-03-01 | 平安科技(深圳)有限公司 | Json数据转换方法、装置、计算机设备及存储介质 |
-
2019
- 2019-11-05 CN CN201911070221.5A patent/CN111045685A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102768643A (zh) * | 2012-06-27 | 2012-11-07 | 河海大学常州校区 | 一种使用多函数契约测试JavaScript函数正确性的方法 |
CN103077185A (zh) * | 2012-12-18 | 2013-05-01 | 厦门雅迅网络股份有限公司 | 一种基于对象的自定义扩展信息的方法 |
US9424003B1 (en) * | 2014-10-24 | 2016-08-23 | Emc Corporation | Schema-less system output object parser and code generator |
CN106796526A (zh) * | 2014-10-31 | 2017-05-31 | 甲骨文国际公司 | Json样式表语言变换 |
CN105159928A (zh) * | 2015-08-05 | 2015-12-16 | 深圳联友科技有限公司 | 一种json数据转换成模型数据的方法及系统 |
CN105069116A (zh) * | 2015-08-11 | 2015-11-18 | 北京思特奇信息技术股份有限公司 | 一种将json串转化为数组的方法及系统 |
CN105786529A (zh) * | 2016-04-22 | 2016-07-20 | 浙江工业大学 | 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 |
CN107015839A (zh) * | 2016-09-27 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 一种实现前端事件代理的方法及装置 |
CN108628737A (zh) * | 2017-03-23 | 2018-10-09 | 北京小唱科技有限公司 | 一种json数据的验证方法和系统 |
CN109032662A (zh) * | 2018-06-19 | 2018-12-18 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 代码文件生成方法、装置、计算机设备和存储介质 |
CN109062560A (zh) * | 2018-07-25 | 2018-12-21 | 北京百度网讯科技有限公司 | 用于生成信息的方法和装置 |
CN109408569A (zh) * | 2018-09-28 | 2019-03-01 | 平安科技(深圳)有限公司 | Json数据转换方法、装置、计算机设备及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176897A (zh) * | 2021-04-29 | 2021-07-27 | 北京字跳网络技术有限公司 | 一种信息处理方法、装置、终端设备及存储介质 |
CN113253940A (zh) * | 2021-06-17 | 2021-08-13 | 北京壁仞科技开发有限公司 | 内存数据转储及构建方法、装置、电子设备及存储介质 |
CN113253940B (zh) * | 2021-06-17 | 2021-09-21 | 北京壁仞科技开发有限公司 | 内存数据转储及构建方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Agrawal et al. | TensorFlow Eager: A multi-stage, Python-embedded DSL for machine learning | |
Kaliszyk et al. | Holstep: A machine learning dataset for higher-order logic theorem proving | |
Friedrich et al. | Process model generation from natural language text | |
CN103631632B (zh) | 移植方法及源到源编译器 | |
CN111124379B (zh) | 页面生成方法、装置、电子设备及存储介质 | |
Selic | The theory and practice of modeling language design for model-based software engineering—a personal perspective | |
CN102696012A (zh) | 从代码使用中创建所推断的符号 | |
US8806430B1 (en) | Renaming instances of an entity in a coding environment | |
JP5567682B2 (ja) | グラフィカル状態遷移図モデルにおける再利用候補の正規化バージョン | |
CN102696026B (zh) | 一种用于创建数据结构的系统和方法 | |
US20090199156A1 (en) | Constraint language editing for generating model-related constraint expressions | |
Ahmed et al. | Cultivating software solutions development in the scientific academia | |
CN111045685A (zh) | 代码转换方法、装置、存储介质及电子设备 | |
Letsholo et al. | TRAM: A tool for transforming textual requirements into analysis models | |
Zhao et al. | Towards formal verification of UML diagrams based on graph transformation | |
Negm et al. | Survey on domain specific languages implementation aspects | |
El Boussaidi et al. | Understanding design patterns—what is the problem? | |
KR20130053714A (ko) | Vpl을 이용한 프로그램 개발 방법과 그 방법을 구현한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체 | |
Al-Azzawi | PyFml-a Textual Language For Feature Modeling | |
JP2019133534A (ja) | 併合方法、併合装置、および併合プログラム | |
John | Leveraging traditional software engineering tools to ontology engineering under a new methodology | |
Dey et al. | Formal specification of structural and behavioral aspects of design patterns. | |
Kalnins et al. | From requirements to code in a model driven way | |
CN102681830B (zh) | 一种比较程序文本的方法和设备 | |
Mascarenhas et al. | Mtp: Model transformation profile |
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 |