[发明专利]通用C/C++结构化对象转换为JSON对象的代码生成方法与系统有效
申请号: | 202010961212.1 | 申请日: | 2020-09-14 |
公开(公告)号: | CN112114792B | 公开(公告)日: | 2023-09-22 |
发明(设计)人: | 张利武;王军利;汤传乐;骆训浩;高子文 | 申请(专利权)人: | 中国船舶重工集团公司第七0九研究所 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41 |
代理公司: | 深圳市六加知识产权代理有限公司 44372 | 代理人: | 向彬 |
地址: | 430000 湖北省*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 通用 c++ 结构 对象 转换 json 代码 生成 方法 系统 | ||
1.一种通用C/C++结构化对象转换为JSON对象的代码生成方法,其特征在于,包括:
步骤S1:读取解析C/C++结构化对象的数据结构定义源代码文件,生成结构化对象逻辑结构元数据信息树,转入步骤S2;
步骤S2:创建空白JSON对象,作为元数据信息树的根节点对应的JSON对象,构造输出对应的代码语句,转入步骤S3;
步骤S3:从根节点开始深度遍历元数据信息树,根节点遍历顺序号设为1,转入步骤S4;
步骤S4:判断遍历是否结束,若遍历结束,转入步骤S11;若遍历未结束,转入步骤S5;
步骤S5:获取下一个遍历节点作为当前遍历节点,节点遍历顺序号加1,转入步骤S6;
步骤S6:判断当前遍历节点是否包括数组,若不包括数组,则转入步骤S7;若包括数组,则转入步骤S10;
步骤S7:判断当前遍历节点是否为叶子节点,若是叶子节点,转入步骤S8;若不是叶子节点,则当前遍历节点为复杂类型,转入步骤S9;
步骤S8:构造输出叶子节点转换代码,转入步骤S4;所述步骤S8中构造输出叶子节点转换代码,包括:获取从元数据信息树根节点到当前节点的最短路径,将最短路径上各节点成员的名称用“.”拼接,根节点成员名用待使用结构化对象的变量名代替,生成当前节点成员完整引用名;以当前节点成员名称和成员完整引用名直接构造JSON键值对;将JSON键值对加入当前节点的父节点对应的JSON对象,输出对应代码语句;
步骤S9:构造输出非叶子节点转换代码,转入步骤S4;所述步骤S9中构造输出非叶子节点转换代码,包括:创建新的空白JSON对象,作为当前节点对应的JSON对象,新创建的JSON对象变量名形如“jsonObjectX”,其中X为当前节点的遍历顺序号;以当前节点包含的成员名称和新创建的空白JSON对象构造JSON键值对;将创建的JSON键值对加入当前节点的父节点对应的JSON对象,输出对应代码语句;
步骤S10:构造输出数组成员节点转换代码,转入步骤S4;所述步骤S10中构造输出数组成员节点转换代码,包括:设数组为N维,N为正整数,下标分别为Index1,Index2,Index3,... IndexN,以N个数组下标分别作为循环控制范围,使用i1_X,i2_X,i3_X...iN_X作为循环控制变量,X为当前节点的遍历顺序号,构造循环语句,输出N层嵌套循环控制代码;在第P层循环体之前,创建新的JSON数组对象并初始化清空,作为第P层循环体对应的JSON数组对象,输出创建代码,各层循环体对应的JSON数组对象变量名形如“jsonArrayiP_X”,其中,P为1,2,3,...N,X为当前节点的遍历顺序号;在第N层循环体内,若当前节点成员为简单类型,直接将当前节点成员加入第N层循环体对应的JSON数组对象;若节点成员为复杂类型,创建新的JSON对象,变量名形如“jsonObjectX”,其中X为当前节点的遍历顺序号,作为当前节点对应的JSON对象,并加入第N层循环体对应的JSON数组对象;在第1层循环体之后,使用当前节点成员名称和第1层循环体对应的JSON数组对象构造键值对,加入当前节点的父节点对应的JSON对象;另外,若N大于1,则在第M层循环体之后,第M-1层循环体内,将第M层循环体对应的JSON数组对象加入第M-1层循环体对应的JSON数组对象中,其中2= M = N;
步骤S11:将根节点对应的JSON对象赋值给待转换的JSON对象,合并输出全部代码,代码生成结束。
2.如权利要求1所述的通用C/C++结构化对象转换为JSON对象的代码生成方法,其特征在于,所述最短路径上,若最短路径上某节点包含数组,则在拼接完整引用名时,在该节点成员名称后增加该节点的数组引用部分,形如“[i1_Y][i2_Y]…[iQ_Y]”,其中,Q为该节点成员的数组维数,Y为该节点的遍历顺序号。
3.如权利要求1或2所述的通用C/C++结构化对象转换为JSON对象的代码生成方法,其特征在于,所述叶子节点成员的数据类型为基本数据类型。
4.如权利要求3所述的通用C/C++结构化对象转换为JSON对象的代码生成方法,其特征在于,所述循环语句为for循环语句,或while循环语句,或do while循环语句,或foreach循环语句,或do until循环语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国船舶重工集团公司第七0九研究所,未经中国船舶重工集团公司第七0九研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010961212.1/1.html,转载请声明来源钻瓜专利网。