通用JSON对象转换为C/C++结构化对象的代码生成方法及系统技术方案

技术编号:26790102 阅读:76 留言:0更新日期:2020-12-22 17:04
本发明专利技术提出一种通用JSON对象转换为C/C++结构化对象的代码生成方法:首先,扫描结构化对象的数据结构定义,得到结构化对象的逻辑结构元数据信息树;接着,深度遍历元数据信息树;然后,根据遍历节点类型,按照非数组叶子节点、非数组非叶子节点和数组节点,分别创建输出简单赋值、嵌套赋值和数组循环赋值代码;最后,将前述生成的代码合并输出到文件中,供开发使用。本发明专利技术的主要优点是:提供一种基于树的通用JSON对象转换为C/C++结构化对象的代码自动生成方法,根据数据结构定义自动生成JSON对象转换为C/C++结构化对象的代码,解决JSON对象转换为C/C++结构化对象的问题,无需人工编码,提高开发效率。本发明专利技术还提供了相应的通用JSON对象转换为C/C++结构化对象的代码生成系统。

【技术实现步骤摘要】
通用JSON对象转换为C/C++结构化对象的代码生成方法及系统
本专利技术属于软件开发自动化和数据交换
,更具体地,涉及一种通用JSON对象转换为C/C++结构化对象的代码生成方法及系统。
技术介绍
随着计算机软件技术和网络技术的发展,分布式应用或跨应用集成需求日益增多,但由于技术需要或历史原因,各应用往往采用不同的程序语言开发,依赖不同的软件环境,运行在不同的硬件平台上,因此,各应用间需进行异构环境下的数据交换。JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构,易于阅读和编写,易于机器解析和生成,网络传输效率高,是异构环境下理想的数据交换格式。C/C++作为一种灵活且高效的开发语言,在软件开发领域得到极其广泛的应用。利用C/C++开发或访问基于JSON格式的应用时,必须解决JSON对象转换成C/C++内部结构化对象的问题。传统解决方法是对每个需要转换成C/C++结构化对象的JSON对象,根据C/本文档来自技高网...

【技术保护点】
1.一种通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,包括:/n步骤S1:读取解析C/C++结构化对象的数据结构定义源代码文件,生成结构化对象逻辑结构元数据信息树,转入步骤S2;/n步骤S2:创建根节点空白JSON对象,将待转换的JSON对象赋值给新创建的根节点JSON对象,转入S3;/n步骤S3:从根节点开始深度遍历元数据信息树,节点遍历顺序号设为1,转入步骤S4;/n步骤S4:判断遍历是否结束,若遍历结束,转入步骤S11;若遍历未结束,转入步骤S5;/n步骤S5:获取下一个遍历节点作为当前遍历节点,遍历顺序号加1,转入步骤S6;/n步骤S6:判断当前遍历节点是否包括...

【技术特征摘要】
1.一种通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,包括:
步骤S1:读取解析C/C++结构化对象的数据结构定义源代码文件,生成结构化对象逻辑结构元数据信息树,转入步骤S2;
步骤S2:创建根节点空白JSON对象,将待转换的JSON对象赋值给新创建的根节点JSON对象,转入S3;
步骤S3:从根节点开始深度遍历元数据信息树,节点遍历顺序号设为1,转入步骤S4;
步骤S4:判断遍历是否结束,若遍历结束,转入步骤S11;若遍历未结束,转入步骤S5;
步骤S5:获取下一个遍历节点作为当前遍历节点,遍历顺序号加1,转入步骤S6;
步骤S6:判断当前遍历节点是否包括数组,若不包括数组,则转入步骤S7;若包括数组,则转入步骤S10;
步骤S7:判断当前遍历节点是否为叶子节点,若是叶子节点,转入步骤S8;若不是叶子节点,则当前遍历节点为复杂类型,转入步骤S9;
步骤S8:构造输出叶子节点转换代码,转入步骤S4;
步骤S9:构造输出非叶子节点转换代码,转入步骤S4;
步骤S10:构造输出数组成员节点转换代码,转入步骤S4;
步骤S11:合并输出全部代码,代码生成结束。


2.如权利要求1所述的通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,所述步骤S8中构造输出叶子节点转换代码,包括:
获取从元数据信息树根节点到当前节点的最短路径,将最短路径上各节点成员的名称用“.”拼接,根节点的成员名用待转换的C/C++结构化对象的变量名代替,生成当前节点成员完整引用名,作为赋值语句的左变量;
以当前节点的成员名称为键,从当前节点的父节点对应的JSON对象包含的键值对中获取键所对应的值,转换为节点成员的数据类型,作为赋值语句的右值;
以所述赋值左变量和赋值右值,构造输出赋值语句。


3.如权利要求2所述的通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,所述最短路径上,若最短路径上某节点包含数组,则在拼接完整引用名时,在该节点成员名称后增加该节点的数组引用部分,形如“[i1_Y][i2_Y]…[iQ_Y]”,其中,Q为该节点成员的数组维数,Y为该节点的遍历顺序号。


4.如权利要求2或3所述的通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,所述叶子节点成员的数据类型为基本数据类型。


5.如权利要求1所述的通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,所述步骤S9中构造输出非叶子节点转换代码,包括:
创建新的JSON对象变量,作为赋值左变量,新创建的JSON对象变量名形如“jsonObjectX”,其中X为当前节点的遍历顺序号;
以当前节点的成员名称为键,从当前节点的父节点对应的JSON对象包含的键值对中,获取所对应的值,转换为JSON对象类型,作为赋值右值;
以前述赋值左变量和赋值右值,构造输出赋值语句;
将新创建的JSON对象变量作为当前节点对应的JSON对象引用。


6.如权利要求1所述的通用JSON对象转换为C/C++结构化对象的代码生成方法,其特征在于,所述步骤S10中构造输出数组成员节点转换代码,包括:
设数组为N...

【专利技术属性】
技术研发人员:王军利张利武王振杰田华臣李宁安
申请(专利权)人:中国船舶重工集团公司第七零九研究所
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1