You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动迁移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:21:25