如何自动迁移Proto Schema:从Repeated数组转为Map格式
从Repeated数组Proto格式自动迁移JSON至Map格式
我之前定义了一个包含repeated数组的Proto Schema,现在要将其重定义为Map格式,需要把基于旧Proto生成的JSON自动迁移到新格式,无需手动修改。
旧版本Proto定义
syntax = "proto3"; repeated Foo models = 1; message Foo { string id = 1; string module = 2; string pattern = 3; }
新版本Proto定义
syntax = "proto3"; map<string,Foo> models = 1; message Foo { string module = 1; string pattern = 2; }
自动迁移方案
可以用脚本实现批量自动转换,以下是Python示例脚本:
import json def migrate_json(old_json_path, new_json_path): # 读取旧格式JSON文件 with open(old_json_path, 'r', encoding='utf-8') as f: old_content = json.load(f) # 转换格式:将数组转为以id为key的Map,同时移除id字段 new_models = {} for item in old_content.get("models", []): item_id = item.pop("id", "") if item_id: new_models[item_id] = item # 组装新格式数据 new_content = {"models": new_models} # 写入新格式JSON文件 with open(new_json_path, 'w', encoding='utf-8') as f: json.dump(new_content, f, indent=2, ensure_ascii=False) # 调用示例:替换为实际文件路径 migrate_json("old_data.json", "new_data.json")
转换说明
- 脚本会自动遍历旧JSON中的
models数组,把每个Foo对象的id作为Map的键,同时剔除id字段,保留module和pattern作为对应的值 - 若旧JSON中
models为空数组,转换后会得到空Map - 可根据实际场景扩展脚本,比如处理嵌套结构、添加异常捕获逻辑等
内容的提问来源于stack exchange,提问作者Lakshmi C
相关产品推荐
相关产品推荐

